键入允许泛型赋值的擦除引用包装,这可能吗?

问题描述

是否可以创建一个类来存储对任何类型变量的引用并允许泛型赋值(具有不同类型的值)?

想象一下这个界面:

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 (将#修改为@)

相关问答

错误1:Request method ‘DELETE‘ not supported 错误还原:...
错误1:启动docker镜像时报错:Error response from daemon:...
错误1:private field ‘xxx‘ is never assigned 按Alt...
报错如下,通过源不能下载,最后警告pip需升级版本 Requirem...