mem_fun_ref问题

时间:2010-10-12 12:25:40

标签: c++ metaprogramming

为什么这段代码会导致编译错误?

#include <iostream>
#include <algorithm>

using namespace std;

class X
{
    public:
        void Print(int x)
        {
            cout << x << endl;
        }
};

int main()
{
    X x;
    mem_fun_ref<void, X, int>(&X::Print) p;
};

错误 main.cpp:18: error: expected ; before p

2 个答案:

答案 0 :(得分:2)

mem_fun_ref是一个函数模板,因此它没有命名类型。

mem_fun_ref<void, X, int>(&X::Print)是一个返回值的函数调用,因此跟随它有p毫无意义。

该函数调用的返回值为mem_fun1_ref_t<void, X, int>,以防您查找。

答案 1 :(得分:2)

你打算写吗

mem_fun1_ref_t<void, X, int> p(&X::Print);
           ^^^^             ^^^

代替? mem_fun_ref不是类模板,而是函数模板。