C++ c++;如何创建函子的std::vector
我的问题是C++ c++;如何创建函子的std::vector,c++,C++,我的问题是类A中调用函数的向量的格式应该是什么?或者,这是唯一可能在a中有一个基函子,并使B和C中的函子从中派生出来的方法吗?或者有更好的方法吗?基本上有两种方法(我可以想到ATM): 注意:在这两种情况下,我都将cFunctor和bFunctor重命名为Functor。它们嵌套在各自的类中,因此这样的前缀没有什么意义 删除的类型 类型擦除的示例是std::function class A { public: int x; //create a vector of functor
类A
中调用函数的向量的格式应该是什么?或者,这是唯一可能在a
中有一个基函子,并使B
和C
中的函子从中派生出来的方法吗?或者有更好的方法吗?基本上有两种方法(我可以想到ATM):
注意:在这两种情况下,我都将cFunctor
和bFunctor
重命名为Functor
。它们嵌套在各自的类中,因此这样的前缀没有什么意义
删除的类型
类型擦除的示例是std::function
class A
{
public:
int x;
//create a vector of functors in B and C here
};
class B
{
public:
struct bFunctor
{
void operator()() const
{
//some code
}
};
};
class C
{
public:
struct cFunctor
{
void operator()() const
{
//some code
}
};
};
void main()
{
A obj;
//iterate through the vector in A and call the functors in B and C
}
你是在问什么类型的?i、 e.std::vector
中的T
是什么?是的!!没错……有可能有这样的东西吗?泛型类型?向量将始终包含相同类型的元素。因此,您必须为functor创建一个基类,然后使用虚拟函数和(智能)指向对象的指针来获得多态行为。请尝试std::function
并对每个实例使用std::bind
。非常感谢。如果您找到其他方法,请告诉我:)
class A {
public:
int x;
std::vector<std::function<void(void)>> functors;
A() : functors { B::bFunctor(), C::cFunctor() }
{ }
};
struct AbstractFunctor {
virtual void operator()() const = 0;
};
class B {
public:
struct Functor : public AbstractFunctor {
void operator()() const {
//some code
}
};
};
class A {
public:
int x;
std::vector<std::unique_ptr<AbstractFunctor>> functors;
A() {
// this could most probably be shortened with make_unique
functors.emplace_back(std::unique_ptr<AbstractFunctor>(new B::Functor()));
functors.emplace_back(std::unique_ptr<AbstractFunctor>(new C::Functor()));
}
};