有关模板编译的一个问题

blldw blldw 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
有以下模板类定义:

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的值为真,故第一个构造函数应该被创建。但是根据编译的错误代码分析,它没有被创建,谁能解释一下。另外如果我想实现类似上述代码的功能,应如何做,谢谢!
...全文
评论 8
收藏 已收藏
分享
返回顶部
blldw
C++ 语言 65,214 成员 250,514 内容