如何解决键入允许泛型赋值的擦除引用包装,这可能吗?
是否可以创建一个类来存储对任何类型变量的引用并允许泛型赋值(具有不同类型的值)?
想象一下这个界面:
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;
};
所以我需要一些解决这种不可能的方法。问题是,赋值操作涉及两种类型。为了执行操作,我们需要以某种方式从其类型擦除存储中检索其中一种类型。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。