名前空間に関して、なぜそれらをいつも使うべきではないのでしょうか?すべてのヘッダー(.hpp)ファイルとすべてのソース(.cpp)ファイルに対して、名前空間内のすべてを宣言するのは良い方法です。別のファイルの名前空間内に何かを宣言したくないという状況がありますか?さらに、コンパイルは、クラスではなく関数に対して使用することができますか?私は現在、OpenGLを使ってゲームを開発しようとしていますが、現在main.cppに書かれている同じ機能を使用するクラスがいくつかあります。別の.hppファイルの名前空間でこれらの関数を宣言し、それらがクラスの一部ではないにもかかわらず対応する.cppファイルに実装するのは意味がありますか?いつ名前空間と別のコンパイルを使用する必要がありますか? (コンパイルをクラス外で使用することはできますか?)
それはこのようなものになります。単純に名前空間とクラスを置き換えるために、クラスでそれを実装するかしないかを説明するコメントと回答について :
// foo.hpp
#ifndef FUNCTIONS_H
#define FUNCTIONS_H
namespace Functions
{
int function1(int x, int y, int z);
void function2(char* ex);
float function3(float a, float b, int c, int d);
}
#endif
// foo.cpp
#include "foo.hpp"
int Functions::function1(int x, int y, int z)
{
// some code
}
void Functions::function2(char* ex)
{
// some code
}
float Functions::function3(float a, float b, int c, int d)
{
// some code
}
EDITを。明確にするために、これらのクラスのすべてが共通の祖先を継承するわけではないことに注意してください。したがって、関数を複数回書き直すことを回避しようとしています。私は伝統的なクラスを名前空間で完全に置き換えようとはしていません。静的なクラスでもこれを達成できることに言及しました。だから、私は静的なクラスを名前空間で置き換えるようなものだと思います。したがって、この時点での私の質問は、なぜこれが悪いことなのでしょうか?なぜ公的に使用される関数の名前空間に静的なクラスを使用するのですか?もちろん
// foo.hpp using class
class Functions
{
public:
static int function1(int x, int y, int z);
};
// foo.hpp using namespace
namespace Functions
{
int function1(int x, int y, int z);
}
// foo.cpp
int Functions::function1(int x, int y, int z) // prepend static for use with class
{
// implementation
}
// someOtherFile.cpp
// some code
int value = Functions::function1(1,2,3); // same use
// more code
なぜ名前空間ですか?なぜクラスに入れないのですか?おそらく静的なクラスが必要です。 – user34660
@ user34660これは名前空間が発明された理由です。 – juanchopanza
そして、それはどのような授業が発明されたのかです。質問は非常に一般的です。関数がオブジェクトの一部であるように関連している場合は、クラスを使用する必要があります。 – user34660