c++ - 键入允许通用分配的已擦除引用包装器,这可能吗?
问题描述
是否可以创建一个存储对任何类型变量的引用并允许泛型赋值(具有不同类型的值)的类?
想象一下这个界面:
class any_ref {
public:
...
// construct any_ref from reference
template <class T>
any_ref(T &ref);
// does stored_ref = std::forward<U>(value) internally
template <class U>
void assign(U&& value);
};
我被卡住了,无法弄清楚如何实现这一点。如果我们想象虚拟模板方法是可能的,那将很容易:
class any_ref {
public:
...
private:
struct ref_holder {
template <class U>
virtual void assign(U&& value) = 0;
};
template <class T>
struct ref_holder_concrete : public ref_holder {
template <class U>
void assign(U&& value) override {
stored_ref = std::forward<U>(value);
}
T &stored_ref;
};
std::unique_ptr<ref_holder> ref;
};
所以我需要一些解决这种不可能的方法。问题是,赋值操作涉及两种类型。为了执行操作,我们需要以某种方式从其类型擦除的存储中检索其中一种类型。
解决方案
推荐阅读
- visual-studio - 用于 DotNetCore 2 包的 Signalr 缺少所有 javascript
- sql - 如何根据复杂条件加入2个数据框
- php - 我如何在当前登录的用户帐户中插入图像名称?
- javascript - 如何使html表格的tbody垂直滚动
- python-3.x - 如何比较两个大小不同但浮点数近似的数组?[Python3]
- java - 如何在 Spring Boot 中从 AMQP 的 Json 字节数组转换?
- css - CSS - 内联块和变换旋转问题
- swift - iPad 和 iPhone 的自动布局
- ruby-on-rails - JRuby:无法将类 org.jruby.RubyObject 的实例转换为类 java.time.Instant
- javascript - Uint8ClampedArray.from 不是函数