我有一个模板类Tpl
,它将一个类和一个指向成员函数的指针作为参数。
但是,当我尝试将指针传递给实际从基类继承的函数时,我收到错误could not convert template argument bla bla bla
(见下文)
#include <iostream>
using namespace std;
class Base
{
public:
void func1 () {}
};
class Derived : public Base
{
public:
};
typedef void (Derived::*PF) ();
template <class T, void (T::*PF) ()>
class Tpl
{
public:
};
int main()
{
PF pf = &Derived::func1; // OK!
Tpl <Derived, &Derived::func1> t; // Error :
// could not convert template argument ‘&Base::func1’ to ‘void (Derived::*)()’ Tpl <Derived, &Derived::func1> t
return 0;
}
为什么编译器在分配pf
时可以进行隐式转换,而不是在我将其作为模板参数传递时?除了做static_cast
之外,还有什么方法可以克服这个问题吗?