C++ 从指向成员函数的指针获取 return

C++ get return from pointer to member functions

我想保存用户的一些设置到一个文件。我有一个名为 Project 的 class,我想存储该成员的值。我已经用 Java 做了很多工作,在那里我会用反射来做,但现在我必须找到 C++ 的解决方案(没有这个功能)。
我的想法:

class Project
{
  Project();

  public:
  //Getter and Setter for private member...

  private:
    string   mProjectName;    //(="Test")
    string   mProjectCreator;
}

class ProjectParser
{
  ProjectParser();
  public:
    void SaveProject(Project* aProjectPtr)
    {
      //do stuff with the example below
    }
}

ProjectParser 将包含一个像这样的对列表:
std::pair<[memberName],[memberFunction]>("projectName",&Project::GetProjectName)...


将项目成员保存到文件的函数 SaveProject(Project* aProjectPtr) 的 ProjectParser 应该被调用并且会做:

  1. 用 [memberName] 和 [memberFunction] 迭代对
  2. 获取 [memberFunction] 的 return(连同 Project 实例)
  3. 为 [memberName] 写入值(例如在 JSON 文件或 XML 中)projectName:"Test"

但作为 C++ 的新手,我不知道如何执行对象实例的成员函数以及如何获取 return 值。有没有可能这样做?

您需要了解的一件事是 C++ 没有反射。如果您将对象的 "name" 作为字符串,则无法轻松获取该对象,除非您已经将所有对象都放在一个容器中。

所以这意味着如果你有一个包含 Project 个对象的容器,比如

std::vector<Project> projects;

然后你可以很容易地找到 mProjectName 成员等于的项目。 "projectName"。您可以使用 std::find_if:

auto iterator = std::find_if(begin(projects), end(projects), [](auto const& project)
{
    return project.mProjectName == "projectName";
});

一旦你有了迭代器,你就可以获取对象并从中调用你喜欢的任何成员函数(直接或通过指向成员函数的指针)。

您当然可以使用 the <functional> header file, like std::function and std::bind 中的函数和 类 来绕过直接指向成员函数的需要。