在Cygwin上禁用了Armadillo的C ++ 11功能。但它适用于Linux。
我希望我的代码能够跨平台。
起初:
// constructor
MyClass(arma::vec x)
{
init(x);
}
当我将一个数组传递给它时,它没有用,因为在Cygwin上没有启用Armadillo的C ++ 11选项:
MyClass a({1.0,2.0,3.0});
在Linux中运行时会导致Cygwin出错。
要解决此问题,我通过添加另一个构造函数来修改代码:
// constructor
MyClass(arma::vec x)
{
init(x);
}
// constructor
MyClass(std::vector<double> x)
{
arma::vec x2;
for(auto d:x)
x2<d;
init(x2);
}
现在,这段代码适用于Cygwin,但在Linux中会导致错误。
MyClass a({1.0,2.0,3.0});
error: call of overloaded ... is ambiguous
如何解决这种歧义?
答案 0 :(得分:2)
创建接受std::initializer_list<double>