在 C 中,模板参数必须是常量表达式。这意味着它们的值必须在编译时已知。编译器无法在此上下文中计算非常量变量。
考虑代码:
template
void modify(){}
要传递一个非常量变量作为模板参数,我们可以这样写:
for(int i = 0; i ();
}
但是,这会触发错误,因为编译器无法在编译时确定 i 的值。循环体可能会执行多次,改变i的值。
我们可以使用模板特化来实现,而不是直接传递非常量变量迭代调用:
#include
template
void modify() { std::cout "
void modify() { std::cout "
void modify() {
std::cout " ();
}
int main() {
modify();
}
要使用编译时未知的值调用Modify,我们可以使用一种称为模板元编程的技术。这是一个简化的示例:
#include
template <:tuple>>
struct TupleSize;
template
struct TupleSize<:tuple>> {
static const int value = sizeof...(Args);
};
template
void callModify(int i) {
if constexpr (i ();
callModify(i 1);
}
}
int main() {
int n = 10;
callModify::value>(0);
}
在此示例中,callModify 采用参数 N,该参数是包含 i 所需值范围的元组的大小。该函数使用递归元程序生成调用以修改至指定大小 N。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3