问题描述
我有一个带有自动参数的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 (将#修改为@)