如何将N 视为N ? [重复]

问题描述 投票:1回答:1
#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

c++ templates const
1个回答
0
投票

对Node进行包装,然后返回该包装。包装器不会直接给出Node next,而是会包装getnext方法,该方法访问下一个原始方法并包装结果。

© www.soinside.com 2019 - 2024. All rights reserved.