0
내가 다음 코드 조각에 의해 의아해하고 같이 초기화리스트를 사용하는 경우 : I main()
에서 3 번째 코드 라인을 유엔의 주석 경우모호함 매개 변수
#include <Eigen/Dense>
#include <vector>
class Foo {};
void f(Eigen::MatrixXd const &) {}
void f(std::vector<Eigen::MatrixXd> const &) {}
void g(Foo const &) {}
void g(std::vector<Foo> const &) {}
int main()
{
Foo a, b, c;
Eigen::MatrixXd x, y, z;
// f({x, y}); ambiguity, why?!
f({x, y, z}); // ok
g({a,b}); // ok
g({a,b,c}); // ok
}
, 내가 얻을 모호한 호출 오류,
/Users/vlad/so.cpp: In function 'int main()':
/Users/vlad/so.cpp:17:13: error: call of overloaded 'f(<brace-enclosed initializer list>)' is ambiguous
f({x, y}); //ambiguity, why?!
^
/Users/vlad/so.cpp:17:13: note: candidates are:
/Users/vlad/so.cpp:6:6: note: void f(const MatrixXd&)
void f(Eigen::MatrixXd const &) {}
^
/Users/vlad/so.cpp:7:6: note: void f(const std::vector<Eigen::Matrix<double, -1, -1> >&)
void f(std::vector<Eigen::MatrixXd> const &) {}
init 목록의 3 개 항목을 사용하여 호출 할 수 있습니다.
그러나 Eigen 행렬 대신에 Foo
클래스를 사용하면 (함수 g
참조) 모든 것이 올바르게 작동합니다. Eigen을 사용할 때 주석이 달린 행이 모호한 이유는 전혀 알지 못합니다. 어떤 아이디어?
추신 : f
을 오버로드하여 std::initializer_list<Eigen::MatrixXd>
이 걸리면 문제가 사라지고 모호한 호출이 없어집니다.
'Eigen :: MatrixXd'는 집합체입니까? –
@KerrekSB, 확실하지 않은 것 같습니다. 왜? POD 멤버를 추가하여'Foo'를 집합체로 만들면 아무 것도 바뀌지 않습니다. – vsoftco
@KerrekSB [생성자] (http://eigen.tuxfamily.org/dox/classEigen_1_1Matrix.html)가있는 것 같습니다. – user657267