我有一个“包装”AngelScript 方法的类。基本上,您将类、方法返回类型、指向方法的指针和参数列表发送给它。
到目前为止,Method
当我“绑定”一个不带参数的类方法时,我能够成功地制作这个对象。但是,如果我尝试添加参数,它会中断。
我正在做这样的事情:
template<typename C, typename R, R (C::*fn)(), typename... Arguments>
class Method {
public:
Method()
{
const asSFuncPtr& func = asSMethodPtr<sizeof( void (C::*)() )>::Convert( AS_METHOD_AMBIGUITY_CAST( R (C::*)(Arguments... parameters)) (fn) );
function = &func;
};
virtual ~Method(){};
const asSFuncPtr* function;
};
struct S
{
int f()
{
return 5;
}
int f(int a)
{
return a + 1;
}
};
然后像这样创建我的Method
对象:
Method<S, int, &S::f> m = Method<S, int, &S::f>();
这行得通。
但是,如果我尝试制作这样的方法对象:
Method<S, int, &S::f, int> m2 = Method<S, int, &S::f, int>();
它打破了这条消息:
template_tests.cpp: In instantiation of ‘Method<C, R, fn, Arguments>::Method() [with C = S; R = int; R (C::* fn)() = &S::f; Arguments = {int}]’:
template_tests.cpp:74:61: required from here
template_tests.cpp:27:142: error: invalid static_cast from type ‘int (S::*)()’ to type ‘int (S::*)(int)’
这是有道理的,因为我将一个指针传递给一个没有参数的函数。
现在,如何更改Method
类以接受指向具有不同数量参数的类方法的方法指针?
我做这样的事情:
template<typename C, typename R, R (C::*fn)(Arguments... parameters), typename... Arguments>
class Method {
...
}
因为这样做会导致各种错误..
基本上,我想我在问 - 我如何在模板模板中“嵌入”可变参数模板?这可能吗?