C ++ Lambda传递自动参数类型

问题描述

我有一个带有自动参数的lambda函数,我想将该参数推入STL容器(例如std :: vector)

例如:

template <typename T>
struct A
{
    A(int a,T &&t): _a(a),_t(t){}

    int _a;
    T _t;

    void work()
    {
        _t(this);
    }
};

void test()
{
   A a(3,[](auto a_ptr)
   {
      std::cout << a_ptr->_a << std::endl;
   });

   a.work();
}

这个例子很好用。

但是,如果我想保存a_ptr供以后在向量中使用,我不知道在向量模板参数中写什么。

我不认为我甚至可以在lambda的参数类型中使用std :: function而不是auto,因为我认为A的类型是递归的(T是接受T的lambda……)

无论如何,这就是我正在考虑的解决方案,但我想知道是否有更好的解决方案:

struct base_a
{
    virtual void work() = 0;
};

template <typename T>
struct A : public base_a
{
    A(int a,_t(t){}

    int _a;
    T _t;

    virtual void work() override
    {
        _t(this);
    }
};

void test()
{
    std::vector<base_a *> v;

    A a(3,[&v](auto a_ptr)
    {
        v.push_back(a_ptr);
        std::cout << a_ptr->_a << std::endl;
    });

    a.work();

    for (auto i: v)
    {
        i->work();
    }
}

是否存在解决此问题的已知设计模式?

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)