C++ C++;变量到常量表达式 模板 A类{}; 模板 B类{}; //... 还有几十个类似的模板类 班级电脑{ 公众时段: void setFrom(int-from){from=from;} void setTo(int to){to_u=to;} 私人: 模板void compute(){ 使用boost::fusion::vector; 使用boost::fusion::at_c; 向量v; at_c(v).operator()(at_c(v));//错误;需要为常量表达式。 }; //... computer.compute(1,3);//好的 compute.compute(var1,var2);//var1,var2不能出现在常量表达式中

C++ C++;变量到常量表达式 模板 A类{}; 模板 B类{}; //... 还有几十个类似的模板类 班级电脑{ 公众时段: void setFrom(int-from){from=from;} void setTo(int to){to_u=to;} 私人: 模板void compute(){ 使用boost::fusion::vector; 使用boost::fusion::at_c; 向量v; at_c(v).operator()(at_c(v));//错误;需要为常量表达式。 }; //... computer.compute(1,3);//好的 compute.compute(var1,var2);//var1,var2不能出现在常量表达式中,c++,boost,C++,Boost,这个问题与Qt无关,但在我的示例中有一行Qt代码 setFrom()和setTo()是基于用户选择通过GUI小部件调用的函数。我的问题的根源在于“from”和“to”是变量。在我的计算成员函数中,我需要选择一种类型(a、B等)基于“from”和“to”的值。我知道如何做我需要做的事情的唯一方法是使用switch语句,但在我的情况下,这非常繁琐,我希望避免。是否有方法将错误行转换为常量表达式?不确定这是否有帮助,但您可以将您的值放在映射中并在其他位置填充它n没有繁琐的switch语句。如果您不想使

这个问题与Qt无关,但在我的示例中有一行Qt代码


setFrom()和setTo()是基于用户选择通过GUI小部件调用的函数。我的问题的根源在于“from”和“to”是变量。在我的计算成员函数中,我需要选择一种类型(a、B等)基于“from”和“to”的值。我知道如何做我需要做的事情的唯一方法是使用switch语句,但在我的情况下,这非常繁琐,我希望避免。是否有方法将错误行转换为常量表达式?

不确定这是否有帮助,但您可以将您的值放在映射中并在其他位置填充它n没有繁琐的switch语句。

如果您不想使用
switch
If/else
阻塞语句,则无法完成此任务。因为
at_c
函数模板采用编译时需要知道的整数参数。变量
to_
from_
在编译时是未知的

我在以下主题中的回答与这个主题有关:



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

不,很抱歉,这没有帮助。填充映射仍然需要大量的工作;我有22个模板类,并且,仅对于所有的from/to组合,我最终得到了400多个块一系列的代码。
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