次の例があるとします。
#include <cstdlib>
class A {
public:
static const std::size_t value = 42;
};
要するに、値(コンパイル時に決定される)で呼び出されるメンバーAを持つクラスを持っています(または、より良い、欲しい)。static const std::size_tvalue42
さて、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 のソリューションが欲しいです (それは些細なことです)。