Решение во время компиляции, чтобы обнаружить, что собственный объект не имеет члена eval ()?

Большинство классов Eigen имеют eval() метод, который заставляет их оценить. Некоторые классы не делают, например, разложения матриц. Есть ли способ отличить эти классы во время компиляции?

0

Решение

Вы можете определить свою собственную черту, которая использует 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)) { };
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]