如何允许函数采用指定的类型?
How to allow a function to take in specified types?
所以我希望我的函数接受一个模板化的参数,如下所示:
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); }
相关文章:
- 为什么在我的函数类型后使用引用运算符 (&) 允许我修改它返回的值?
- 为什么 c++(g++) 不允许模板返回类型和函数名称之间有空格?
- 如何允许模板参数中的类类型,仅当它有两个基类时
- 在 C++20 中是否不再允许在 std 中对程序定义类型的函数模板进行专用化?
- C++从外部类继承的嵌套类;不允许使用不完整的类型
- 当目标指针不是基类的类型时,为什么允许dynamic_cast为多态类生成 null 指针?
- 标准对此指向成员函数类型模板参数有何说明?是我的代码有误,还是 MSVS 16.6 有问题?
- 为什么允许dynamic_cast到非唯一的基类类型?
- 如何在C++中允许成员函数的自定义返回类型进行类型擦除?
- E0322:不允许使用抽象类类型 " " 的对象
- 类型别名允许分配任意指针,尽管 int* 是必需的
- 奇怪的不完整类型不允许错误
- STD ::向量迭代器类型和允许的操作
- 不完整的类型不允许错误
- 为什么显式类型转换允许对私有继承进行向上转换
- c++11 中的类型何时允许内存
- 如何从输入字符串中分离整数并将其转换为int类型以允许对其进行计算
- 非类型哪些类型是允许的
- c++不完全类型不允许在类内部使用
- 不完全类型不允许出现错误和元组