我有一个看起来像这样的模板:
template< typename T, void (*f)( T& param )>
class SomeAction
{
...
};
f
在里面使用SomeAction
(其实f
是类成员,不过我觉得没关系)。
问题是:这可以通过从模板参数列表中删除'typename T'并让编译器推断出该类型来改进吗?
谢谢!
我有一个看起来像这样的模板:
template< typename T, void (*f)( T& param )>
class SomeAction
{
...
};
f
在里面使用SomeAction
(其实f
是类成员,不过我觉得没关系)。
问题是:这可以通过从模板参数列表中删除'typename T'并让编译器推断出该类型来改进吗?
谢谢!
也许您正在寻找的 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
}