将指向基类函数的指针作为模板参数传递

时间:2014-10-17 10:52:15

标签: c++ templates member-function-pointers

我有一个模板类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之外,还有什么方法可以克服这个问题吗?

0 个答案:

没有答案