我有一个看起来像这样的模板:
template< typename T, void (*f)( T& param )>
class SomeAction
{
...
};
在f
内使用 SomeAction
(实际上f
是班级成员,但我认为不是这样)。
问题是:可以通过删除&#39; typename T&#39;来改善这一点。从模板参数列表中让编译器推导出那种类型?
谢谢!
答案 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
}