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()));
    }
};