[英]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.