模板非类型参数为静态成员函数

时间:2011-05-06 13:32:55

标签: c++

我正在尝试编写一个模板,该模板将非模型参数的模板转换为静态成员函数:

#include <iostream>
using namespace std;

class C {
public:
    static void method()
    {
        cout << "C::method" << endl;
    }
};

typedef void (C::*pMethod)();
template<typename T, pMethod>
void callingFunction()

{
    T c;
    pMethod aPointerToMember = &T::method;
    (c.*aPointerToMember)();
}


int main()
{
    callingFunction<C, &C::method>();

    return 0;
}

但是在main中调用函数时总是会出错:

error: no matching function for call to 'callingFunction()' // mingw

如果成员函数不是静态的,它可以工作,我怎样才能使它与静态函数一起工作?

感谢。

谢谢

1 个答案:

答案 0 :(得分:5)

对于静态成员函数,将typedef更改为typedef void (*pMethod)(); - 就像它是一个自由函数一样。