C ++变量为const表达式

时间:2011-01-01 05:17:31

标签: c++ boost

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语句,但这在我的情况下非常繁琐,我想避免。无论如何将错误行转换为常量表达式?

2 个答案:

答案 0 :(得分:1)

不确定它是否有帮助,但您可以将您的值放在地图中并在其他地方填充它,然后就没有繁琐的切换声明。

答案 1 :(得分:1)

如果您不想使用switchif/else块语句,则无法完成此任务。因为at_c<>函数模板需要在编译时需要知道的整数参数。您的变量to_from_在编译时是未知的。

我在以下主题中的答案与此主题有某种关系:

C++ STL type_traits question


或者可能(我不确定)你可以编写一个从自身派生的类模板,每个基数减少整数N的值,然后类模板调度一个特定值的函数N.