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

template< typename T, void (*f)( T& param )>
class SomeAction
{
...
};
fSomeAction内部使用(实际上f是类成员,但我认为没有关系)。

问题是:可以通过从模板参数列表中删除“typename T”并让编译器推断出该类型来改善此情况吗?

谢谢!

最佳答案

也许您正在寻找的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
}

10-08 15:58