用于检测Eigen对象没有eval()成员的编译时解决方案?

时间:2014-01-20 23:02:36

标签: c++ c++11 evaluation eigen

大多数Eigen类都有eval()方法强制进行评估。有些类没有,例如矩阵分解。有没有办法在编译时区分这些类?

1 个答案:

答案 0 :(得分:2)

您可以定义自己的特征,使用SFINAE来确定:

namespace detail
{
    template<typename T>
    auto has_eval_impl(void*)
        -> decltype(std::declval<T>().eval(), std::true_type());

    template<typename T>
    auto has_eval_impl(...) -> std::false_type;
}

template<typename T>
struct has_eval : decltype(detail::has_eval_impl<T>(nullptr)) { };