gpt4 book ai didi

c++ - 使用 boost::function 和 boost::bind 确定仿函数中的对象和方法

转载 作者:搜寻专家 更新时间:2023-10-31 01:23:49 24 4
gpt4 key购买 nike

我想获得指向该对象的指针,以及该仿函数将从使用 boost::function 和 boost::bind 构造的仿函数中调用哪个方法的指示。这将使我能够自动确定必须执行哪些仿函数的顺序。

以下(伪)代码(参见POINTER_OFMETHOD_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...
}

提前致谢!

最佳答案

我知道以下内容并不是对您问题的严格回答,但是。

不要这样做。请改用多态性。这是我在当前项目代码中看到的最奇怪的事情之一:如果函数指针指向“someFunction”——做一些额外的 Action 。

您可以添加额外的行为,而无需使用装饰器设计模式对您的类进行太多更改。这将使用 Decorator::DoIt 扩展您的 myClassA::DoIt。

http://en.wikipedia.org/wiki/Decorator_pattern

关于c++ - 使用 boost::function 和 boost::bind 确定仿函数中的对象和方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/673731/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com