有关模板编译的一个问题
有以下模板类定义:
template<typename T, int N>
class Test {
public:
#if N == 1
template<typename T2>
Test(const T2& val) {
t[0] = val;
}
#elif N == 2
template<typename T2>
Test(const T2& val, const T3& val2) {
t[0] = val, t[1] = val2;
}
#endif
private:
T t[N];
};
以下语句为什么编译不过?
Test<int, 1> t(1);
个人理解,在编译时刻类模板中的N已知,因此#if...预处理应该可以得到N == 1的值为真,故第一个构造函数应该被创建。但是根据编译的错误代码分析,它没有被创建,谁能解释一下。另外如果我想实现类似上述代码的功能,应如何做,谢谢!
template<typename T, int N>
class Test {
public:
#if N == 1
template<typename T2>
Test(const T2& val) {
t[0] = val;
}
#elif N == 2
template<typename T2>
Test(const T2& val, const T3& val2) {
t[0] = val, t[1] = val2;
}
#endif
private:
T t[N];
};
以下语句为什么编译不过?
Test<int, 1> t(1);
个人理解,在编译时刻类模板中的N已知,因此#if...预处理应该可以得到N == 1的值为真,故第一个构造函数应该被创建。但是根据编译的错误代码分析,它没有被创建,谁能解释一下。另外如果我想实现类似上述代码的功能,应如何做,谢谢!
...全文


