Большинство классов Eigen имеют eval()
метод, который заставляет их оценить. Некоторые классы не делают, например, разложения матриц. Есть ли способ отличить эти классы во время компиляции?
Вы можете определить свою собственную черту, которая использует 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)) { };
Других решений пока нет …