如果您想了解一些背景故事,请参阅this question。
我想将事物作为不可变数据传递。
template<class T>
class A
{
public:
void send(const T& value);
};
A<int> a;
a.send(1);
到目前为止,这么好。我只是发送了一个常量值但是当我使用指针时,事情变得棘手。
A<int *> a;
int b = 1;
a.send(&b);
我最终得到的是:
void send(int *const & value)
我现在传递的指针无法作为引用进行更改,但可以更改此指针指向的内容。这是正确的,但我想表示你不能修改这个指针所指向的内容。
我的目的是让事情变得一成不变但这有可能吗?
答案 0 :(得分:3)
您可以将a
声明为
A<const int *> a;
答案 1 :(得分:3)
如果我理解正确,你基本上想要一个指针专门化,那么如何:
template <typename T>
struct Immutable {
typedef T const& Type;
};
template <typename U>
struct Immutable<U*> {
typedef U const* Type;
};
template<class T>
class A {
public:
void send(typename Immutable<T>::Type);
};