고유 표현식을 탐지하는 유형 특성을 작성하려고합니다. 즉, A * A + B
등을 감지 할 수 있기를 원합니다. 여기서 A
및 B
은 Eigen
행렬/벡터입니다. 현재 내가이 일을 해요 : Eigen::MatrixBase<Derived>
가능한 모든 아이겐 식의 (템플릿) 기지 (예 : decltype(A * A + B)
등)입니다Eigen에서 매트릭스 표현식을 탐지하기위한 유형 특성 작성
template<typename T>
struct is_matrix_expression : std::false_type
{
};
template<typename Derived> // specialization
struct is_matrix_expression<Eigen::MatrixBase<Derived>> :
std::true_type
{
};
하는 것으로. 그러나 MatrixBase<Derived>
전문화가 아닌 decltype(A * A + B)
과 같은 것이 더 적합하기 때문에 일반 템플릿이 선택됩니다.
필자는 어떻게 전문성을 고를 수 있습니까? 또는 다른 말로하면 Eigen::MatrixBase<Derived>
의 가능한 모든 어린이를 전문화 할 수 있습니까? 나는 std::is_base_of
에 SFINAE와 조금 놀았지만, 표현식의 유형 (이 경우 Derived
)이 미리 알려지지 않은 템플릿이 아닌 명시적인 유형이 필요합니다.
동등하게 유형 X
이 Base<T>
의 자식인지 여부를 감지 할 수 있습니까? 일부 유형은 T
입니까? 뭔가 bob_template<T>
에서 상속하는 경우
'typename'을 삭제하십시오. 'typename std :: template vector'이라고 쓰시나요? –
[이 이전 답변] (http://stackoverflow.com/a/12182195/27678)이 도움이 되었습니까? – AndyG
당신의 문제는'decltype (A * A + B)'가'MatrixBase'이 아니라고 생각합니다. 그것은'CwiseBinaryOp '와 같을 것 같습니까? –
Barry