C++ 变量-对变量应用算术的最简单方法

C++ 变量-对变量应用算术的最简单方法,c++,math,boost,boost-variant,C++,Math,Boost,Boost Variant,最近我一直在试验boost::variant。我试图将算术应用于两个类型为的变量对象: typedef boost::variant<int, float> VariableValue; VariableValue var1 = 2; VariableValue var2 = 5; VariableValue var3 = var1 + var2; std::cout << "Result: " << var3 << std::endl; //ex

最近我一直在试验
boost::variant
。我试图将算术应用于两个类型为
的变量对象:

typedef boost::variant<int, float> VariableValue;
VariableValue var1 = 2;
VariableValue var2 = 5;
VariableValue var3 = var1 + var2;
std::cout << "Result: " << var3 << std::endl; //expected 7
typedef boost::variant VariableValue;
变量值var1=2;
变量值var2=5;
变量var3=var1+var2;

std::cout我从问题中找到了解决方案,并根据我的目的对其进行了简化:

struct Add : public boost::static_visitor<VariableValue> {
    template <typename T, typename U>
    auto operator() (T a, U b) const -> decltype(a + b) {
        return a + b;
    }
};
struct-Add:public-boost::static\u-visitor{
模板
自动运算符(){
返回a+b;
}
};
加上:

VariantValue var1 = 2;
VariantValue var2 = 1.234;
std::cout << "Result: " << boost::apply_visitor(Add{}, var1, var2) << std::endl;
VariantValue var1=2;
方差值var2=1.234;

std::cout变量所持有的备选方案是一个运行时属性。
variant+variant
应该有什么类型?根据用户指定输入的方式,variant将保留其中一种类型。我将更新问题以反映这一点。编译时应该知道
var1+var2
的类型。但是,只有在运行时才知道变量所包含的内容。编译器必须考虑所有可能的替代方案。在一般情况下,如果要处理所有可能的组合,sum变量将由
N^2
类型组成。访问者的返回类型不能取决于变量所包含的备选方案。
VariantValue var1 = 2;
VariantValue var2 = 1.234;
std::cout << "Result: " << boost::apply_visitor(Add{}, var1, var2) << std::endl;