このコードは不完全なタイプエラーを発生させます。何が問題ですか?クラスに静的メンバーインスタンス自体を含めることはできませんか?同じ結果を達成する方法はありますか?
struct Size
{
const unsigned int width;
const unsigned int height;
static constexpr Size big = { 480, 240 };
static constexpr Size small = { 210, 170 };
private:
Size( ) = default;
};
同じ結果を達成する方法はありますか?
「同じ結果」によって、constexpr
- ness of Size::big
およびSize::small
?その場合、おそらくこれは十分に近いでしょう:
struct Size
{
const unsigned int width = 0;
const unsigned int height = 0;
static constexpr Size big() {
return Size { 480, 240 };
}
static constexpr Size small() {
return Size { 210, 170 };
}
private:
constexpr Size() = default;
constexpr Size(int w, int h )
: width(w),height(h){}
};
static_assert(Size::big().width == 480,"");
static_assert(Size::small().height == 170,"");
クラスは、同じタイプの静的メンバーを持つことが許可されています。ただし、クラスはその定義の終わりまで不完全であり、オブジェクトは不完全な型で定義できません。不完全な型のオブジェクトを宣言して、後で(クラスの外で)完全な場所で定義できます。
struct Size
{
const unsigned int width;
const unsigned int height;
static const Size big;
static const Size small;
private:
Size( ) = default;
};
const Size Size::big = { 480, 240 };
const Size Size::small = { 210, 170 };
こちらをご覧ください: http://coliru.stacked-crooked.com/a/f43395e5d08a3952
ただし、これはconstexpr
メンバーには機能しません。