2
讓N
爲std::size_t
類型的模板參數。我想能夠調用我的類的構造函數有兩種方式:變量參數(包的大小爲N)和默認參數
A a(x1, x2, x3, ..., xN)
和
A a(x1, x2, x3, ..., xN, xN1)
其中xi
變量都是同一類型的。我的第一個想法是:
template <std::size_t N>
struct A
{
template <typename ...Args, typename = typename std::enable_if<N == sizeof...(Args), void>::type>
A(Args ...args) {
f(args...); // where f is some function
}
template <typename ...Args, typename = typename std::enable_if<N+1 == sizeof...(Args), void>::type>
A(Args ...args) {
// run f on the first N arguments
// run g on the last argument (selection is done using templates, I just did not want to write the code)
}
};
該技術的解釋如下:Variadic templates with exactly n parameters。 當然,這個問題是你不能以這種方式重載構造函數。
任何想法?
你能解釋一下嗎? – 0x499602D2 2014-10-11 15:38:25
@ 0x499602D2 OP中的一個重新定義了相同的函數模板(使用不同的默認參數)。使簽名的'enable_if'部分成爲這兩個不同的函數模板。 – 2014-10-11 15:42:18
那麼前者應該用於SFINAE嗎? – 0x499602D2 2014-10-11 15:51:31