0
我試圖制定一個包裝我的松鼠VM和SQRat結合C++ sqrat雖然包裝裝訂方法
結合類的通常方法是調用:
Class<MyClass> myClass(vm,"myClass");
myClass.Func(_SC("Foo"), &MyClass::Foo);
凡類IM試圖綁定看起來就像這樣:
class MyClass {
public:
void Foo() { cout << bar; }
int bar;
};
現在IV裹松鼠成處理機器狀態和錯誤稱爲「SqEnvironment」
一個輔助類class SqEnvironment
{
public:
SqEnvironment(unsigned int stacksize); //set up enviroment add callbacks ext.
template<class T>
SqurrelClass<T> bindClass(string classname);
HSQUIRRELVM v;
}
template<class T>
SqurrelClass<T> SqEnvironment::bindClass(string classname)
{
return SqurrelClass<T>(classname,v);
}
調用主的bindclass方法,看起來像這樣:
int main(int argc, char* argv[])
{
SqEnvironment e(1024);
SqurrelClass<MyClass> myclass = e.bindClass<MyClass>("MyClass");
myclass.bindFunction(&MyClass::Foo,"Foo"); //No idea.
cin.get();
return 0;
}
我只是不能完全得到落實下來的綁定方法。
template<class T>
class SqurrelClass
{
public:
SqurrelClass(std::string classname, HSQUIRRELVM v);
void bindFunction(void (T::*mymethod), std::string name); //Error C2182 'mymethod': illegal use of type 'void'
~SqurrelClass();
private:
Sqrat::Class<T>* myClass;
};
template<class T>
inline SqurrelClass<T>::SqurrelClass(std::string classname, HSQUIRRELVM v)
{
myClass = new Sqrat::Class<T>(v, classname.c_str());
Sqrat::RootTable(v).Bind(classname.c_str(), *myClass);
}
template<class T>
inline SqurrelClass<T>::~SqurrelClass()
{
delete myClass;
}
現在IV看出:c++ passing class method as argument to a class method with templates
這是SUPER接近,但它是通過添加類的實例的方法調用,允許類的方法,直接去refrenceing解決。
但我完全不能這樣做...一個實例永遠不會被我有權限訪問。
那麼我該如何去做這樣的事情呢?
現在,如果我只能找出如何傳遞參數。 –