4

我有一个看起来像这样的模板:

template< typename T, void (*f)( T& param )>
class SomeAction
{
...
};

f在里面使用SomeAction(其实f是类成员,不过我觉得没关系)。

问题是:这可以通过从模板参数列表中删除'typename T'并让编译器推断出该类型来改进吗?

谢谢!

4

1 回答 1

3

也许您正在寻找的 C++17 功能是使用 auto 声明非类型模板参数

我还不能测试这个,因为还没有支持这个特性的编译器,但大概它会允许你编写一个部分专业化SomeAction来推断T

template<auto> class SomeAction;
template<void (*f)(auto&)> class SomeAction<f> {};

void foo(int&) { /* bla */ }

int main()
{
    // C++17 only, no compiler support yet
    SomeAction<f> s; // T deduced to be int
}
于 2016-08-10T13:08:38.857 回答