我想通过将其作为模板参数传递来调用成员函数,而不使用boost。这是我试图做的一个例子,
class object { void method(); }
{
object object_instance;
...
apply<object:: method>();
...
template<class F>
void apply() { F(object_instance); } // want to call object_instance.F()
}
这不起作用,所以问题是如何将对象方法绑定到对象。 感谢
上面是一个例子,而不是真正的代码。我有一堆函数只有名称不同,但有许多参数,我想在运算符中包含。
答案 0 :(得分:5)
类似的东西:
struct foo
{
void bar(void) {}
};
template <typename R, typename C>
R apply(C& pObject, R (C::*pFunc)())
{
return (pObject.*pFunc)();
}
int main(void)
{
foo f;
apply(f, &foo::bar);
}
此。
答案 1 :(得分:1)
这与您的代码类似,并允许将成员函数作为模板参数传递:
class object { public: void method() {} };
object object_instance;
template<void (object::*F)()>
void apply() {
(object_instance.*F)();
}
int main() {
apply<&object::method>();
return 0;
}
答案 2 :(得分:0)
由于成员函数不是类型或整数值,因此不能将其作为模板参数传递。你可以通过创建一个调用成员函数的结构来做你想要的东西,尽管在模板中使用object_instance是相当臭的。
你究竟想做什么?
答案 3 :(得分:0)
此示例适用于c ++ ox中的右值引用。不适用于所有编译器。
class Sample
{
public:
void fun() { cout << "Sample::fun\n"; }
};
template<typename Function>
void FunCall( Function&& f)
{
f();
}
void RvaluesDemo()
{
FunCall([&]
{
Sample().fun();
});
}