我在想我的想法。我想问你是否知道任何与此相关的图书馆或文章。或者你可以告诉我这是一个愚蠢的想法,为什么。Dynamic C++
我有一个类,我想在运行时动态添加方法/属性。我非常了解使用复合/命令设计模式和使用嵌入式脚本语言来完成我所说的技术。我只是在探索这个想法。没必要说这是个好主意。
class Dynamic
{
public:
typedef std::map<std::string, boost::function<void (Dynamic&)> > FuncMap;
void addMethod(const std::string& name, boost::function<void (Dynamic&)> func) {
funcMap_[name] = func;
}
void operator[](const std::string& name) {
FuncMap::iterator funcItr = funcMap_.find(name);
if (funcItr != funcMap_.end()) {
funcItr->second(*this);
}
}
private:
FuncMap funcMap_;
};
void f(Dynamic& self) {
doStuffWithDynamic(self);
}
int main()
{
Dynamic dyn;
dyn.addMethod("f", boost::bind(&f, _1));
dyn["f"]; // invoke f
}
的想法是,我可以重新绑定名称“F”在运行时的任何功能。我知道字符串查找和boost :: function与raw函数指针的性能问题。通过一些艰苦的工作和不可移植的黑客攻击,我认为我可以让性能问题变得不那么痛苦。
用同一种技术,我可以有一个“v表”的名称查找办“运行期间继承”和调度函数调用的动态运行属性的基础。
如果只是想告诉我用Smalltalk或Objective-C的,我尊重这一点,但我爱我的C++,我与它坚持。
这将是更好的,如果“操作符[](常量的std :: string&名称)”返回一个boost ::函数对象,以便使语法有点更自然的“DYN [” F“()”,这将允许参数和“函数指针”的可能性(这实际上只是boost :: function的实例 – 2009-07-10 20:32:18
不要“爱你的C++”。使用最适合当前任务的语言*,而不是“ “爱”,或者你认识的唯一一个人 – jalf 2009-07-10 22:29:13
我通常开车到拐角商店买牛奶,有时候我走路去买牛奶,走路不是因为我不懂驾驶或不懂驾驶比步行更快我这样做是出于同样的原因,我的数学极客朋友花了几天和几周的时间解决他的模拟器可以在几秒钟内给他答案的一个方程式,我这样做是为了练习。 人们看到我走路,并试图帮助告诉我,我应该开车,因为它更快。谢谢,但我正在走路。 – 2009-07-11 20:38:12