未知类型的C ++模板参数

时间:2016-09-05 17:49:04

标签: c++ templates

假设我们想要编写一个应该将值作为模板参数的函数(例如,效率原因),但我们事先并不知道参数的类型。期待。可以将其实现为

template<typename T, T val>
func() { cout << val; }

但是,调用这样的函数

并不好玩
func<int, 5>()

是否可以重写func s.t.我们可以用以下方式调用它吗?

func<5>()

1 个答案:

答案 0 :(得分:2)

主要取决于您实际功能的解决方案是按照以下方式定义:

template<typename T>
constexpr void func(T val) { }

然后将其作为f(5)调用,并从函数本身的参数中推导出模板参数。

否则,在C ++ 14中,您无法避免使用模式template<typename T, T value> 它与标准模板库使用的模式相同,请参见std::integral_constant的定义。

减轻(可能)样板的可能解决方案是基于结构的使用,例如:

template<typename T>
struct S {
    template<T value>
    static void func() {}
};

你可以这样做:

using IntS = S<int>;
// ....
IntS::func<5>();

随着即将推出的C ++ 17修订版,你将设法按照以下方式进行:

template<auto value>
void func() {}

这可以作为f<5>()调用,这就是你要找的东西..