Как разрешить функции принимать указанные типы?

Поэтому я хочу, чтобы моя функция принимала шаблонный параметр, примерно так:

template <typename T>
void foo(T test)

Я только хочу fooпринять все эти типы, которые я укажу. Скажи, что у меня есть что-то вродеImage<cam1>, Image<cam2>, Other<cam1>-> если я только хочу Image<cam1> а также Image<cam2> быть типами, которые входят в foo(), как мне это указать?

2 ответа

если я только хочу Image<cam1> а также Image<cam2> быть типами, которые входят в foo, как мне это указать?

Что-то вроде следующего?

template <typename T>
typename std::enable_if<std::is_same<T, cam1>::value
                     || std::is_same<T, cam2>::value>::type foo (Image<T> test)

Я согласен с ответом max66, особенно если набор разрешенных параметров шаблона используется более одного раза (см. Комментарий Jejo). Другой подход, который не использует SFINAE, заключается в следующем:

namespace detail {
template <typename T>
void foo(Image<T> test) {}
}

void foo(Image<Cam1> test) { return detail::foo(test); }
void foo(Image<Cam2> test) { return detail::foo(test); }
Другие вопросы по тегам