测试
当我在c++
TMP上进行实验时,我注意到模板有多么强大。但在某种程度上,我想知道为什么下面的代码无效,但它使用了可变模板类型扩展(1(。当非类型变量展开工作正常时(2(。求幂没有意义,因为在这两个扩展参数中都不可用。或者是我的编译器出了问题。clang++ std=c++20
template<typename Y> struct Exp{
static const bool useless=false;
};
template<typename... T> auto initAll1(int forAll,T...ts){
std::array a={(ts,forAll)...};
}
template<typename... T> auto initAll2(int forAll){
std::array a={(T,forAll)...};
}
template<typename... T> auto initAll3(int forAll){
std::array a={(Exp<T>::useless,forAll)...};
return a;
}
我说的是initAll2
。它不起作用,我制作了initAll3
以避免出现错误。
正如max66的评论所说,选项3可能不会有任何运行时开销。但如果你想要更清洁的东西,你可以这样做:
template<typename... T>
auto initAll2(int forAll){
std::array a={std::conditional_t<true, int, T>{ forAll }...};
}