如何允许函数接受指定的类型?

问题描述 投票:0回答:2

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

template <typename T>
void foo(T test)

我只希望foo接受我指定的所有这些类型。假设我有Image<cam1>Image<cam2>Other<cam1>->之类的东西,如果我只想将Image<cam1>Image<cam2>设为foo()的类型,该如何指定?

c++ templates sfinae template-deduction
2个回答
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)

0
投票

我同意max66的answer,尤其是在多次使用允许的模板参数集的情况下(请参见Jejo的comment)。另一种不使用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); }
© www.soinside.com 2019 - 2024. All rights reserved.