如何启用将转换模板参数T转换为const T?

假设我有一个下课

template <typename T>
struct Node { T value; Node next; };

通常,人们需要编写与此类似的代码(现在假设Sometype是std :: string,尽管我认为这并不重要)。

Node<SomeType> node = Node{ someValue, someNodePtr };
...
Node <const SomeType> constNode = node; // compile error

解决方法之一是定义显式转换运算符:

template <typename T>
struct Node
{
    T value;
    Node* next;
    operator Node<const T>() const { 
        return Node<const T>{value, reinterpret_cast<Node<const T>* >(next)};
    }
};

有没有更好的“适当”方法呢? 1.通常,除了明确定义转换运算符之外,允许将SomeType转换为SomeType的正确方法是什么? (不仅在我的示例中)。 2.如果需要定义转换运算符,那么reinterpret_cast是正确的方法吗?还是有“更清洁”的方式?