如何解决根据运行时值获取模板
enum operation {
plus,delete
//...
}
operation_do(plus);
在该函数内部,有一个模板函数调用,该调用基于运行时参数。
重要说明:我无法将operation_do()
用作模板函数。这就是条件。
void operation_do(operation op) {
call<op>();
}
我遇到了编译错误:op
不是常量表达式。
constexpr operation get(operation arg) {
return arg;
}
void operation_do(operation op) {
constexpr operation elem = get(op);
call<elem >();
}
但是仍然是相同的错误:op
不是常数表达式。
有人可以帮忙吗?
解决方法
在该函数内部,有一个模板函数调用,该调用基于实时参数。重要提示:我不能将operation_do()用作模板函数。这就是条件。
这是问题所在。
在C ++中,运行时值(因此,函数参数可以是运行时值)不能用作模板参数。
出于相同的原因,无法通过constexpr
值进行遍历
void operation_do(operation op) {
constexpr operation elem = get(op); // <--- error
call<elem >();
}
因为无法从运行时值初始化elem
。
我能想象的最好的方法是使用一系列if
(或者可能更好的是switch
)来将其从运行时值传递到编译时值。
类似
void operation_do (operation op)
{
switch ( op )
{
case plus:
call<plus>();
break;
case del:
case<del>()
break;
}
}
显然,只有在枚举值的数量受到限制并且您可以将switch
集中在一个位置的情况下,这才是可接受的。
请注意,delete
是关键字,因此不能将其用作标识符。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。