我有一个看起来像这样的模板:
template< typename T, void (*f)( T& param )>
class SomeAction
{
...
};
f
在SomeAction
内部使用(实际上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
}