1

最近、私は自分自身のために新しい小さなプロジェクトを開始し、命名規則に関する文献を読んでいました。どのコーディング スタイルが優先されるかに関係なく、Google コーディング スタイル またはハンガリー語表記法(私の意見では、アプリ スタイルではなくシステム ハンガリー語スタイル (誰かがそれが良いスタイルではないと考えている場合でも)) または言及されていない他のスタイルです。命名規則を使用するか、名前空間で作成するかについて考えました。また、この投稿を読みました。

私の注意は継承にあります。

グーグルのような例:

class MyClassInterface {
  int some_stuff() = 0;
};

class MyClassA : MyClassInterface {
  int some_stuff() { return 1; }
};

class MyClassB : MyClassInterface {
  int some_stuff() { return 2; }
};

今、私の考えは、名前空間を使用することでした:

namespace my {

namespace interface {
class Class {
  int some_stuff() = 0;
};
} // namespace interface

namespace a {
class Class : interface::Class {
  int some_stuff() { return 1; }
};
} // namespace a

namespace b {
class Class : interface::Class {
  int some_stuff() { return 2; }
};
} // namespace b

} // namespace my

この種の命名の利点は、次の例で見ることができます。

using namepsace my;

void foo(interface::Class lala) {
  // do something;
}

// ...
int main() {
  using namespace a;

  Class bar;
  foo(bar);

  b::Class bar2;
  foo(bar2);
}

これで ausing namespaceと入力できるようになり、常に優先されるクラスが使用されますが、他のすべての子クラスには、そこの名前空間から引き続き到達できます。

だから私の質問は、これは良い考えですか、それとも私が見ていないいくつかの欠点がありますか?

編集:

私も使うことができました

namespace my {

namespace interface {
class Class {
  int some_stuff() = 0;
};
} // namespace interface

class ClassA : interface::Class {
  int some_stuff() { return 1; }
};

class ClassB : interface::Class {
  int some_stuff() { return 2; }
};

} // namespace my

多くの名前空間にネストしないようにします。

補遺

StackOverflow が質問を入れるのに適切な場所であるかどうかはわかりませんが、プログラマーには、タグの命名規則さえありません (ただし、命名基準)。また、名前空間と命名規則についてはあまり議論されていません。それが間違っている場合は、質問を移動できます。

4

1 に答える 1

3

良いルールは次のとおりだと思います: 名前空間を使用してライブラリを識別します (ライブラリの内容)。ネストされた名前空間は、非常に特殊なケース (ネストされた名前空間の内容がライブラリ自体と見なされる場合) で使用します。

その例として、標準ライブラリがあります。これは、std名前空間を通じてその機能を提供し、(たとえば) 名前空間を通じて chrono ライブラリ (ライブラリ自体と見なすことができます) を提供しstd::chronoます。他の例としては、Boost とそのライブラリが挙げられます。

于 2013-10-07T13:13:17.913 に答える