1

如果您想了解一些背景故事,请参阅这个问题。

我想将事物作为不可变数据传递。

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)

我现在传递一个无法更改的指针作为参考,但该指针指向的内容可以更改。这是正确的,但我想说你不能修改这个指针指向的内容。

我的意图是使事物不可变,但这甚至可能吗?

4

2 回答 2

3

你可以声明a

A<const int *> a;
于 2012-08-02T14:14:49.903 回答
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);
};
于 2012-08-02T14:19:34.217 回答