1

私は悪名高いコードをいくつか継承し、私の人生をさらに複雑にするサードパーティのライブラリを受け取ったときに幸運に恵まれました. これが私が最終的に得たものです。

class Something; // third party library

namespace Something {
  class Something;
  class Templated<class TemplateClass>;
}

ここで、サード パーティ ライブラリのクラス「Something」を、名前空間 Something の下の新しいクラスの TemplateClass パラメーターとして使用する必要があります。これはうまくいくはずだと思った

class Something; // third party library

namespace Something {
  class Something;
  class Templated<class TemplateClass>;

  class Impl : public Templated< ::Something > {}
}

しかし、コンパイラはそれを好まない。コンパイルする唯一の方法は

class Something; // third party library

class Something2 : public Something {} // dirty hack

namespace Something {
  class Something;
  class Templated<class TemplateClass>;

  class Impl : public Templated< Something2 > {}
}

しかし、私はそれがあまり好きではありません。これを行うためのより良い方法があるはずです。

4

1 に答える 1

3

別の名前空間を使用できます。

class Something; // third party library

namespace third_party{
  using ::Something;
}

namespace Something {
  class Something;
  class Templated<class TemplateClass>;

  class Impl : public Templated< ::third_party::Something > {}
}

ただし、一般的に、クラスと名前空間にまったく同じ名前を付けるのは非常に悪い考えだと思います。

于 2012-09-25T09:05:51.200 に答える