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

私があなたを正しく理解していれば、基本的にポインターの特殊化が必要なので、これはどうですか:

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 に答える
3

a次のように宣言できます

A<const int *> a;
于 2012-08-02T14:14:49.903 に答える