template <typename Real>
class A{ };
template <typename Real>
class B{ };
//... a few dozen more similar template classes
class Computer{
public slots:
void setFrom(int from){ from_ = from; }
void setTo(int to){ to_ = to; }
private:
template <int F, int T> void compute(){
using boost::fusion::vector;
using boost::fusion::at_c;
vector<A<float>, B<float>, ...> v;
at_c<F>(v).operator()(at_c<T>(v)); //error; needs to be const-expression.
};
//...
computer.compute(1, 3); // ok
computer.compute(var1, var2); // var1, var2 cannot appear in a constant-expression
这个问题与Qt无关,但我的例子中有一行Qt代码。
setFrom()和setTo()是基于GUI小部件的用户选择调用的函数。我的问题的根源是'from'和'to'是变量。在我的计算成员函数中,我需要根据'from'和'to'的值选择一个类型(A,B等)。我知道如何做我需要做的唯一方法是使用switch语句,但这在我的情况下非常繁琐,我想避免。无论如何将错误行转换为常量表达式?
答案 0 :(得分:1)
不确定它是否有帮助,但您可以将您的值放在地图中并在其他地方填充它,然后就没有繁琐的切换声明。
答案 1 :(得分:1)
如果您不想使用switch
或if/else
块语句,则无法完成此任务。因为at_c<>
函数模板需要在编译时需要知道的整数参数。您的变量to_
和from_
在编译时是未知的。
我在以下主题中的答案与此主题有某种关系:
或者可能(我不确定)你可以编写一个从自身派生的类模板,每个基数减少整数N的值,然后类模板调度一个特定值的函数N.