C ++从指针返回到成员函数

时间:2017-03-08 09:54:59

标签: c++ reflection return-value member-function-pointers

我想保存用户对文件所做的一些设置。我有一个名为Project的类,并希望存储该成员的值。我已经用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)...


将项目成员保存到文件中的功能 应该调用ProjectParser的SaveProject(Project* aProjectPtr)并执行:

  1. 使用[memberName]和[memberFunction]
  2. 迭代对
  3. 返回[memberFunction](与Project实例一起)
  4. 为[memberName]写入值(例如在JSON文件或XML中)projectName:"Test"
  5. 但是对于C ++来说,我不知道如何为对象的实例执行成员函数以及如何获取返回值。是否有可能这样做?

1 个答案:

答案 0 :(得分:2)

您需要学习的一件事是C ++没有反思。如果您有&#34;名称&#34;将对象作为字符串,除非已经有容器中的所有对象,否则无法轻松获取对象。

这意味着如果你有一个Project个容器的容器,比如说

std::vector<Project> projects;

然后,您可以轻松找到mProjectName成员等于例如{0}}的项目。 "projectName"。您可以使用std::find_if

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

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

您当然可以使用the <functional> header file中的函数和类,例如std::functionstd::bind,以避免直接指向成员函数的需要。