ヘッダーファイルの使用法について、次の疑問があります。
1 - コメントの後に配置するガードを含める
/* Copyright Note and licence information (multiple lines) */
#ifndef FOO_H
#define FOO_H
// Header file contents
#endif
Herb Sutter は、著書「C++ コーディング標準」の中で、上記のようなコードには問題があると述べています。彼は、「#ifndef」ステートメントはヘッダー ファイルの最初の行に表示する必要があると言っています。私はこれを説得力があるとは感じていません。これはヘッダーファイルの皆さん/ギャルが続きますか?
2 - ヘッダー ファイルで名前空間を使用する
#ifndef FOO_H
#define FOO_H
namespace FooNameSpace{
// Header file contents
}
#endif
上記のコードは正しい慣行を使用していますか? つまり、ヘッダー ファイルで名前空間を使用しますか? ヘッダー ファイルに名前空間をインポートすることが無意味である理由はわかっていますが、上記のような宣言はどうでしょうか。
上記の方法が正しい場合、別の名前空間にあるクラスの「前方宣言」をどのように行うのですか? のようですか
#ifndef FOO_H
#define FOO_H
namespace AnotherNameSpace{
class AnotherFoo; // forward declaration
}
namespace FooNameSpace{
// Use AnotherFoo here
}
#endif
「循環依存」を回避する唯一の方法は「前方宣言」ですよね?