大佬教程收集整理的这篇文章主要介绍了虚函数、std::function 和不可复制的对象 问题问题,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
下面是我所看到的一个简化的、人为的例子。
我有一个接受 std::function
对象的虚函数。
class Foo {
virtual voID bar(std::function<voID()> &&f);
};
这很好用,直到我需要捕获一个不可复制的变量。
auto ptr = std::make_unique<int>();
Foo f{};
f.bar([ptr = std::move(ptr)]() {
// Use ptr...
});
我明白为什么这不起作用:std::function
不允许不可复制的对象。我也知道,在大多数情况下,修复方法是让 bar
接受一个模板,如下所示:
template<typename F>
bar(F &&f);
在我的特定情况下,bar
必须是虚拟的。有人知道解决方法吗?
shared_ptr
因为它可以被复制。class FooVisitor {
public:
virtual ~FooVisitor() = default;
virtual void Invoke() = 0;
};
class FooVisitorImpl : public FooVisitor {
std::unique_ptr<int> mState;
public:
FooVisitorImpl(std::unique_ptr<int> aStatE)
: mState(std::move(aStatE))
{}
void Invoke() final {
// callBACk code
}
};
// main code
Foo x;
FooVisitor v(std::make_unique<int>(0));
x.bar(v);
// or,if Foo must retain the callBACk
Foo x;
auto v = std::make_unique<FooVisitor>(/* ... */);
x.bar(std::move(v));
以上是大佬教程为你收集整理的虚函数、std::function 和不可复制的对象 问题问题全部内容,希望文章能够帮你解决虚函数、std::function 和不可复制的对象 问题问题所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。