【发布时间】:2009-03-23 15:02:56
【问题描述】:
我想获得指向该对象的指针,以及该函子将从使用 boost::function 和 boost::bind 构造的函子中调用的方法的指示。 这将允许我自动确定必须执行哪些函子的顺序。
以下(伪)代码(请参阅 POINTER_OF 和 METHOD_OF)显示了我正在尝试做的事情:
class myClassA
{
public:
DoIt(int i) { return i+i; }
};
class myClassB
{
public:
DoItToo(double d) { return d*d; }
};
typedef boost::function0<int> Functor;
myClassA classA;
myClassB classB;
Functor funcA = boost::bind( &myClassA::DoIt, &classA, 10 );
Functor funcB = boost::bind( &myClassB::DoItToo, &classB, 12.34 );
// Create a vector containing some functors and try to determine the objects
// they are called upon and the methods they invoke
std::vector<Functor> vec;
vec.push_back( funcA );
vec.push_back( funcB );
for (int i = 0; i < vec.size();i++)
{
if (POINTER_OF(vec[i]) == &classA)
{
// This functor acts on classA
if (METHOD_OF(vec[i]) == &myClassA::DoIt)
{
// This functor calls the 'DoIt' method.
}
else if (METHOD_OF(vec[i]) == &myClassB::DoItToo)
{
// This functor calls the 'DoItToo' method.
}
}
// etc...
}
提前致谢!
【问题讨论】:
-
你写的代码看起来很难看。对不起。请描述更多信息,你想对指针和方法的信息做什么?
-
一些风格建议,重命名“classA”——它不是一个类,它是一个对象,它是一个特定类的实例。 “instanceA”就可以了; “instanceOfClassA”特别冗长,但至少是准确的。
标签: c++ boost-bind