Функции C++ 11 от Armadillo отключены на Cygwin. Но он работает на Linux.arma :: vector mistaken with std :: vector
Я хочу, чтобы мой код был кросс-платформенным.
В первый:
// constructor
MyClass(arma::vec x)
{
init(x);
}
И когда я передал массив к нему, он не работал, потому что C++ 11 вариантов Армадилло не включена на Cygwin:
MyClass a({1.0,2.0,3.0});
Это приведет к в ошибке в Cygwin, работает в Linux.
Чтобы устранить эту проблему, я изменил код, добавив еще один конструктор:
// 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
Как исправить эту двусмысленность?
'инициализации (х)' Пожалуйста, прекратите использование 2-этап инициализации. Для этого нужны конструкторы делегирования C++ 11. Кроме того, было бы проще просто исправить проблему Armadillo на Cygwin? –
@NicolBolas, Armadillo - это библиотека из моей руки. C++ 11 не является проблемой Armadillo, но проблема Cygwin заключается в том, чтобы реализовать его неполную. Кстати, как избежать 'init' в этом случае? Я не могу вызвать другой конструктор, прежде чем создать «x2». – ar2015
Я не знаю деталей класса 'vec' Армадилло, но что-то вроде этого:' MyClass (const std :: vector & x): MyClass (arma :: vec (x.begin(), x.end())) '. Или любой другой интерфейс, который предоставляет их векторный класс. Кроме того, я бы предложил взять параметр 'std :: vector'' const & 'вместо значения, так как вы не собираетесь переходить от него. –