Armadillo 的 C++11 特性在 Cygwin 上被禁用。但它适用于 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
如何解决这种歧义?
最佳答案
创建接受 std::initializer_list<double>
的 ctor
关于c++ - arma::vector 与 std::vector 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34976966/