假设我们想要编写一个应该将值作为模板参数的函数(例如,效率原因),但我们事先并不知道参数的类型。期待。可以将其实现为
template<typename T, T val>
func() { cout << val; }
但是,调用这样的函数
并不好玩func<int, 5>()
是否可以重写func s.t.我们可以用以下方式调用它吗?
func<5>()
答案 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>()
调用,这就是你要找的东西..