大多数Eigen类都有eval()
方法强制进行评估。有些类没有,例如矩阵分解。有没有办法在编译时区分这些类?
答案 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)) { };