Как разрешить функции принимать указанные типы?
Поэтому я хочу, чтобы моя функция принимала шаблонный параметр, примерно так:
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); }