如何允许函数采用指定的类型?

How to allow a function to take in specified types?

本文关键字:类型 何允许 函数      更新时间:2023-10-16

所以我希望我的函数接受一个模板化的参数,如下所示:

template <typename T>
void foo(T test)

我只想foo接受我指定的所有这些类型。假设我有类似Image<cam1>Image<cam2>Other<cam1>--> 如果我只希望Image<cam1>Image<cam2>是进入foo()的类型,我该如何指定?

如果我只想让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); }