私は、ヘッダーファイル内の名前空間内にクラスを持っています。クラスはテンプレート型を必要とし、特定の型のみを使用します。以下に例を示します。名前空間内のプライベートクラス
ファイルa.hpp
// a.hpp
namespace a_ns {
template<class T>
class a {
// stuff
};
typedef a<double> a_double;
} // end of namespace
// stuff
ファイルb.hpp
// b.hpp
#include <a.hpp>
namespace b_ns {
typedef a_ns::a_double b;
}
ファイルmain.cppに
// main.cpp
#include "b.hpp"
int main() {
b_ns::b my_b; // <<<--- I LIKE this!
a_ns::a<float> my_a_which_is_not_allowed; // <<<--- I DO NOT LIKE THIS THOUGH! D:
}
ですから、むしろアウト憧れの例から見ることができるように最終目的はエンドユーザがclass a
をfloat
とタイプ名として宣言することを許可しないことです。 dは、typedef a<double> a_double;
で宣言されているように、特定のタイプの事前定義されたクラスのみを使用できるようにします。
私はこれがを上記のように作成することができるので、私は間違っていましたが、これはa.hpp
を含むb.hpp
を含むためです。だからあなたは問題を見る! (うまくいけば?)
可能な限り単純な解決策があります。ここで
実際に私はこれが好きです - プログラマーを作る際のトラブルを克服する方法がないことを恐れています。 –
@DieterLücking、あなたが意図的に自分自身を穴の中に掘り起こさなければならないという事実を乗り越えると、あなたはそれを防ぐことについて多くのことを心配し始めます。彼らが自分自身をねじ込む場合は、それらを聞かせてください。そこに実際に助けることができるものがあれば、少なくとも今はそれを得るためのハックは必要ありません。 – chris
またはハーブサッターとしてそれを置く:マヒアヴェリではなく、マーフィーに対して守る – TemplateRex