c++ - arma::vector 与 std::vector 混淆

标签 c++ c++11 initializer-list armadillo overloading

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/

相关文章:

c++ - 在处理回调函数时,通常的异常处理方式是什么?

c++ - 如何解决虚拟方法中的实例化问题?

c++ - 如何 move initializer_list 的元素?

c++ - 有效组合算法过时限

c++ - 使用 Contrib 和 C++11 支持编译 OpenCV?

c++ - 使用运算符重载添加两个多项式错误

c++ - std::initializer_list 返回值的生命周期

c++ - 为什么我的值从 int 转换为 char?

c++ - 误解了 C++ 中的循环?

c++ - 一个简单的加减乘除程序