arma::vector 误认为 std::vector

arma::vector mistaken with std::vector

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>

的构造函数