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

C++ template argument of unknown type

本文关键字:参数 c++ 类型 未知      更新时间:2023-10-16

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

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

然而,调用这样的函数并不有趣

func<int, 5>()

是否可以重写函数s.t.,我们可以用下面的方式调用它?

func<5>()

一个主要取决于实际功能的解决方案是如下定义:

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>()调用,这就是您正在寻找的…