如何使用模板别名删除一个不必要的参数

时间:2015-03-13 11:14:20

标签: c++ templates template-aliases

我有这个模板类:

template<typename T, T F(const std::string&)>
struct Builder
{
  T operator()(const std::string& s) const { return F(s); }
  typedef T type;
};

因为我需要一个包含函数的类和函数返回的值(因为我需要对它的引用)。

正如您所看到的,我有两个模板参数,但实际上第一个是冗余的。有可能以某种方式删除它吗?模板别名?比宏更好的东西

1 个答案:

答案 0 :(得分:3)

第二个模板参数的返回类型T必须在第一次使用之前定义(因为C ++规则规定任何实体只能在声明之后才能使用),并且声明的唯一方法是使用前面的类型模板参数(就像你做的那样),所以你不能省略第一个参数。