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