有人可以解释为什么我得到:



对于该行:

DoSomething->*pt2Func("test");

这节课
#ifndef DoSomething_H
#define DoSomething_H

#include <string>

class DoSomething
{
public:
    DoSomething(const std::string &path);
    virtual ~DoSomething();

    void DoSomething::bar(const std::string &bar) { bar_ = bar; }

private:
    std::string bar_;
};

#endif DoSomething_H


#include "DoSomething.hpp"

namespace
{

void foo(void (DoSomething::*pt2Func)(const std::string&), doSomething *DoSomething)
{
    doSomething->*pt2Func("test");
}

}

DoSomething::DoSomething(const std::string &path)
{
    foo(&DoSomething::bar, this);

}

最佳答案

问题#1:以某种方式交换了第二个参数的名称和第二个参数的类型。它应该是:

      DoSomething* doSomething
//    ^^^^^^^^^^^  ^^^^^^^^^^^
//    Type name    Argument name

代替:
    doSomething* DoSomething

你有什么。

问题2:您需要添加几个括号才能正确取消对函数的引用:
    (doSomething->*pt2Func)("test");
//  ^^^^^^^^^^^^^^^^^^^^^^^

最终,这是您得到的:
void foo(
    void (DoSomething::*pt2Func)(const std::string&),
    DoSomething* doSomething
    )
{
    (doSomething->*pt2Func)("test");
}

这是您的程序编译的live example

关于c++ - 项不求值带有1个参数的函数,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/15321596/

10-16 05:20