gpt4 book ai didi

C++从指向成员函数的指针返回

转载 作者:行者123 更新时间:2023-11-28 01:51:58 24 4
gpt4 key购买 nike

我想保存用户所做的一些设置到一个文件。我有一门课叫 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)...


将项目的成员保存到文件中的函数 SaveProject(Project* aProjectPtr)应该调用 ProjectParser 的一部分,并且会执行以下操作:

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

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

最佳答案

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

这意味着如果你有一个 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 中的函数和类, 比如 std::function std::bind 绕过直接指向成员函数的需要。

关于C++从指向成员函数的指针返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42668066/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com