#include <iostream>
template <typename T>
struct Node
{
Node<T>* next;
};
template <typename T>
struct X
{
Node<T>* node;
X(Node<T>* node) : node(node) {}
X<const T> getConst() const
{
return X<const T>(node);
}
};
int main()
{
Node<int> node{ nullptr };
X<int> x(&node);
auto constX = x.getConst();
}
此代码无法编译,因为我返回了X<const T>
,并且X<const T>
的构造函数需要一个Node<const T>
,而我正在传递Node<T>
。如何克服这个问题?因为无论如何T
都可以被视为const T
。
对Node进行包装,然后返回该包装。包装器不会直接给出Node next
,而是会包装getnext
方法,该方法访问下一个原始方法并包装结果。