簡體   English   中英

如何使用 C++ 模板模擬類型的引用?

[英]How to simulate reference of a type with C++ templates?

我想用 class 包裝一個類型的引用,以向它添加其他功能,如下所示,但我不想強制使用 function 或運算符來訪問基本類型方法。

class A {
    private:
        int fX;
    public:
        void SetSomething(int x){ fX = x; }
        int GetSomething() { return fX; }
};

template<typename T>
class Ref {
    private:
        T& fRef;
    public:
        Ref(T &ref) : fRef(ref) {}
        inline operator T&() { return fRef; }
};

int main() {
    A a;
    Ref<A> ref(a);
    ref.SetSomething(100);
    return 0;
};

https://godbolt.org/z/8x8aehb8e

有可能實現這種模板嗎?

不幸的是,透明代理目前在 C++ 中是不可能的。 您可以從類型繼承,實現operator->或重新創建整個接口。 我通常在引用類型中重寫整個接口。

你可以使用std::reference_wrapper

cppreference 上的 std::reference_wrapper

std::reference_wrapper 是一個 class 模板,它將引用包裝在可復制、可分配的 object 中。 它經常被用作將引用存儲在通常不能保存引用的標准容器(如 std::vector)中的一種機制。

他們的例子:

    std::list<int> l(10);
    std::iota(l.begin(), l.end(), -4);
    std::vector<std::reference_wrapper<int>> v(l.begin(), l.end());
    // Then you can simulate random access on a list :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM