众所周知,模板参数可以是指向成员函数的指针。
所以我可以写:
struct Bar
{
int fun(float x);
};
template <int (Bar::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<&Bar::fun> FooBar;
但是,如果我希望Bar
类型本身是模板参数怎么办:
template <typename B, int (B::*FUN)(float)>
struct Foo
{ /*...*/ };
typedef Foo<Bar, &Bar::fun> FooBar;
现在,当我使用它时,我必须写Bar
两次!
我的问题是:有没有办法强制编译器自动推断类类型?
目标是让它正常工作:
typedef Foo<&Bar::fun> FooBar;
typedef Foo<&Moo::fun> FooMoo;