我想保存用户对文件所做的一些设置。我有一个名为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)
并执行:
projectName:"Test"
但是对于C ++来说,我不知道如何为对象的实例执行成员函数以及如何获取返回值。是否有可能这样做?
答案 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::function
和std::bind
,以避免直接指向成员函数的需要。