有人可以解释为什么我得到:
对于该行:
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/