【发布时间】:2010-12-08 13:28:34
【问题描述】:
我有一个这样的调用函数:
template<typename T, void (T::*method)()>
void CallMethod(T *object){
(object->*method)(args);
}
虽然这很有效:
void (*function)(A *) = &CallMethod<A, &A::method>;
此代码无法编译,第二行出现错误:
void (A::*method)() = &A::method;
void (*function)(A *) = &CallMethod<A, method>;
有什么办法可以解决吗?我需要 CallMethod 模板来获取一个指向存储在变量中的方法的常量指针。
【问题讨论】:
-
这是无法编译的实际代码吗?这里的“方法”是什么?您正在将一个名为方法的成员函数分配给一个也称为方法的变量,并且该成员函数变量被声明为错误..
-
你为什么不使用 std::tr1::function/boost::function 和绑定呢?
-
'method'只是A的一些方法,不是实际代码,我尽量简化了。
-
boost:function/bind 如果他真正想要的是一个带有 A* 参数的函数,它将不起作用。我认为他正在尝试动态创建一个。
-
@CashCow:您可以将
bind的成员函数指向对象,从返回的function中获取函数指针,然后使用它...
标签: c++ templates pointers methods