模板参数常量求值
1.为什么编译器不能在编译时计算'i'?
编译时计算要求在程序执行之前知道'i'的值。但是,在提供的代码中,“i”是一个循环变量,在程序执行期间会发生变化。编译器无法在编译时确定“i”的值,因为它是动态分配的值。
2。我可以在不修改 API 接口的情况下实现目标吗?
是的,您可以使用模板特化来创建一个递归函数,迭代模板参数的范围。例如,您可以创建一个函数:
template
void modify_recursive() {
// Call modify with template argument 'i'
modify();
// Recursively call modify_recursive with the next template argument
if (i ();
}
}
使用非常量参数调用“modify”
要使用非编译时常量的值调用“modify”,您可以使用称为模板元编程的技术。一种方法是创建一个模板类,该类将函数对象作为参数并使用所需的值调用它:
template
struct InvokeWithParam {
InvokeWithParam(F f, int param) : f(f), param(param) {}
void operator()() { f(param); }
F f;
int param;
};
int var = 5; };int var = 5;
modify();
这将使用 var 的值调用修改函数。
免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。
Copyright© 2022 湘ICP备2022001581号-3