0
我創建了一個存儲函數及其參數類型的MemberFunctionWrapper模板類。它有一個調用方法,該方法接受void *的向量並在調用函數之前將它們轉換爲函數調用所需的參數類型。使用可變參數模板將void *存儲在std :: vector中以形成函數參數
我的問題是,包裝只能採取固定數量的函數參數 (_arg0,_arg1)。
我想讓該類採用任意數量的函數參數(arg0,arg1,arg2 ... argX)我該如何實現這一目標?
在此先感謝
class Foo
{
public:
void foo(int a, const string& b);
};
template< class _obj, class _function, class _arg0, class _arg1 >
class MemberFunctionWrapper
{
const _function m_memberfunction;
public:
MemberFunctionWrapper(_function memFn)
: m_memberfunction(memFn)
{ }
void call(std::shared_ptr<void>& obj,
const std::vector<std::shared_ptr<void>>& args)
{
m_memberfunction(*static_cast< _obj* >(obj.get()),
*static_cast< _arg0* >(args.at(0).get()),
*static_cast< _arg1* >(args.at(1).get()));
}
};
int main()
{
std::shared_ptr<int> i(new int(88));
std::shared_ptr<string> s(new string("hello"));
std::shared_ptr<Foo> foo(new Foo);
std::shared_ptr<void> iVoid = std::static_pointer_cast<void>(i);
std::shared_ptr<void> sVoid = std::static_pointer_cast<void>(s);
std::shared_ptr<void> fooVoid = std::static_pointer_cast<void>(foo);
MemberFunctionWrapper
<
Foo,
decltype(std::mem_fn(&Foo::foo)),
int,
string
> wrapper(&Foo::foo);
wrapper.call(fooVoid, std::vector<std::shared_ptr<void>>{iVoid, sVoid});
system("pause");
}