Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/reactjs/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 重写泛型类函数绑定以在回调中使用_C++_Oop_Overriding_Virtual - Fatal编程技术网

C++ 重写泛型类函数绑定以在回调中使用

C++ 重写泛型类函数绑定以在回调中使用,c++,oop,overriding,virtual,C++,Oop,Overriding,Virtual,我有一个程序,它可以创建粗糙类型以被其他库覆盖。 例如,一个名为ScriptEng的基类被脚本实现库覆盖;比如Lua 所以这个库从ScriptEng创建了一个名为LuaScriptEng的类型 在运行时调用库并创建指向此类型的指针 ScriptEng* script = LoadClassFromLibrary("LuaScriptEng.dll","LuaScriptEng"); 或 当我试图将其他类方法传递给这个实例以暴露于这个嵌入的lang时,就会出现问题 Game* game = ne

我有一个程序,它可以创建粗糙类型以被其他库覆盖。 例如,一个名为ScriptEng的基类被脚本实现库覆盖;比如Lua

所以这个库从ScriptEng创建了一个名为LuaScriptEng的类型

在运行时调用库并创建指向此类型的指针

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.