C++にてヘッダファイルMyLib.h
をincludeするだけで使用できることを前提としたライブラリを制作しています.
とある定数MyConstant
を提供したいのですが,次の制約があるため#define
を用いることができません.
MyConstant
はMyType
型である.MyConstant
はリテラル型の値で初期化される.- 型安全を保障したい.
- 異なる翻訳単位間で
&MyConstant
の同一性を保証したい.
参考にするためにVisual C++ 2015にてstd::cout
などがどう実装されているかヘッダファイルを遡って検索してみましたが,以下のようにextern
宣言されていました.
cpp
1//... 2__PURE_APPDOMAIN_GLOBAL extern istream cin, *_Ptr_cin; 3__PURE_APPDOMAIN_GLOBAL extern ostream cout, *_Ptr_cout; 4__PURE_APPDOMAIN_GLOBAL extern ostream cerr, *_Ptr_cerr; 5__PURE_APPDOMAIN_GLOBAL extern ostream clog, *_Ptr_clog; 6//...
MyLib.h
にextern MyType MyConstant;
と宣言してもどこかの翻訳単位で明確に定義する必要が出てきてしまいます.
どのように実装すればよろしいでしょうか?
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2016/07/12 05:17
2016/07/12 05:38