我想用C ++构建一个框架,而且C ++没有内置的类似c#的反射功能是一个难点。
我试图解决的问题是:我有一个对象,我将在运行时知道它的类名(作为字符串),我也会在运行时知道它的属性名称(如字符串)。然后,我想知道在运行时创建此类实例的最佳方法是什么,并将默认值放在其属性中,而不必创建另一个构造函数。
另外,我想避免使用像boost这样的第三方库,以及编译器的特定功能。
感谢您的帮助,任何提示/想法都将不胜感激!
答案 0 :(得分:3)
在纯粹的标准C ++中,不可能(在运行时通过名称实例化一个类),因为C ++ 11没有反射。
但是,你可以考虑像
这样的事情moc
)我建议在您的框架中定义一些约定和实现工具,以满足您的需求。例如,您可以定义自己的根类并添加C ++代码生成器(如Qt中的moc
)来帮助您。
答案 1 :(得分:1)
这很简单:
#include <string>
using namespace std;
class Blog
{
public:
Blog(string t, string d) : title(t), description(d) {}
string getTitle() {return title;}
void setTitle(string t) {title = t;}
// etc...
private:
string title;
string description;
}
然后到init
Blog *blog = new Blog {"The Title", "Blog description"};
答案 2 :(得分:1)
class Blog
{
public:
Blog() {}
Blog(std::string s1, std::string s2): Title(s1), Description(s2){}
// add get, set methods separately as required
// alternately, you may declare Title, Description as public:
private:
std::string Title;
std::string Description;
}
...Then we use it somewhere
Blog blog = new Blog("The Title", "Blog description");