次の例があるとします。
#include <cstdlib>
class A {
public:
static const std::size_t value = 42;
};
要するに、値(コンパイル時に決定される)で呼び出されるメンバーA
を持つクラスを持っています(または、より良い、欲しい)。static const std::size_t
value
42
さて、IIRC、これは特定の状況下でのみうまく機能します。たとえば、のアドレスを取得する場合はそうではありませんA::value
。これがすべてのケースで正常に機能するためには、実装ファイルに定義を追加する必要があります。
const std::size_t A::value;
ただし、このファイルをヘッダーのみにしたいので、これはできません。別の一般的な解決策は次のとおりです。
class A {
public:
enum { value = 42 };
};
の型を にしたいので、この解決策も好きではありませA::value
んstd::size_t
。
この問題の良い解決策は何ですか? できれば、小さくてポータブルなソリューションであり、 のような巨大なマクロ マジックを備えたものではありませんBOOST_STATIC_CONSTANT
。
C++11 ではなく、C++03 のソリューションが欲しいです (それは些細なことです)。