Как разрешить функции принимать в указанных типах? - PullRequest
0 голосов
/ 19 октября 2019

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

template <typename T>
void foo(T test)

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

Ответы [ 2 ]

2 голосов
/ 19 октября 2019

если я только хочу, чтобы 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)
0 голосов
/ 20 октября 2019

Я согласен с ответом по 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); }
...