C++ 重写泛型类函数绑定以在回调中使用
我有一个程序,它可以创建粗糙类型以被其他库覆盖。 例如,一个名为ScriptEng的基类被脚本实现库覆盖;比如Lua 所以这个库从ScriptEng创建了一个名为LuaScriptEng的类型 在运行时调用库并创建指向此类型的指针C++ 重写泛型类函数绑定以在回调中使用,c++,oop,overriding,virtual,C++,Oop,Overriding,Virtual,我有一个程序,它可以创建粗糙类型以被其他库覆盖。 例如,一个名为ScriptEng的基类被脚本实现库覆盖;比如Lua 所以这个库从ScriptEng创建了一个名为LuaScriptEng的类型 在运行时调用库并创建指向此类型的指针 ScriptEng* script = LoadClassFromLibrary("LuaScriptEng.dll","LuaScriptEng"); 或 当我试图将其他类方法传递给这个实例以暴露于这个嵌入的lang时,就会出现问题 Game* game = ne
ScriptEng* script = LoadClassFromLibrary("LuaScriptEng.dll","LuaScriptEng");
或
当我试图将其他类方法传递给这个实例以暴露于这个嵌入的lang时,就会出现问题
Game* game = new Game(); //contains stuff.
auto game_bind = script->createClass<Game>("Game", game);
game_bind->bindMethod("helo", &Game::hello);
现在,我提出的解决方案可能会奏效,但它真的很混乱
从我所读到的情况来看,在这种情况下,包装泛型将是“类型擦除”,但在这样做的过程中,我看到每个脚本调用5-9个函数调用,这确实会让程序陷入困境
除此之外还有什么更好的方法呢?这里缺少很多内容,但如果我理解,您希望派生
ScriptEng
并重写createClass
?如果是这样的话,这取决于你的需要。如果给定的ScriptEng
对象始终用于创建一种类型,则可以对基类进行模板化,而不是对基成员进行模板化。如果T
的子集有限,使用virtual createGameClass(const std::string&,Game*)
等代替模板是否有意义?否,因为将有多个类,我用这个公开。
Game* game = new Game(); //contains stuff.
auto game_bind = script->createClass<Game>("Game", game);
game_bind->bindMethod("helo", &Game::hello);
class ScriptEng
{
public:
ScriptEng();
template<class T>
ScriptClass<T>* createClass(const std::string& name,T* cla)
{
//Implement per engine information here in children
return new ScriptClass<T>(cla);
}
virtual bool callFunction(const std::string& name)
{
return true;
}
virtual ~ScriptEng();
};
Game.somefunction(); //From lua or some other lang, call the current instance of this function.