从函数指针

时间:2016-08-10 00:10:43

标签: c++ templates c++17 type-deduction class-template

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

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

SomeAction(实际上f是班级成员,但我认为不是这样)。

问题是:可以通过删除&#39; typename T&#39;来改善这一点。从模板参数列表中让编译器推导出那种类型?

谢谢!

1 个答案:

答案 0 :(得分:3)

您正在寻找的C ++ 17功能可能是Declaring non-type template parameters with 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
}