variable initialize c++ c++11 static-members

c++ - initialize - ¿Una clase no puede tener instancias miembro constexpr estáticas de sí misma?



initialize static member c++ (2)

Este código me está dando error de tipo incompleto . ¿Cuál es el problema? ¿No está permitido que una clase tenga instancias miembro estáticas de sí misma? ¿Hay alguna manera de lograr el mismo resultado?

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; };


¿Hay alguna manera de lograr el mismo resultado?

Por "el mismo resultado", ¿tiene la intención específica de constexpr of Size::big y Size::small ? En ese caso, tal vez esto sería lo suficientemente cerca:

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,"");


Una clase puede tener un miembro estático del mismo tipo. Sin embargo, una clase está incompleta hasta el final de su definición y un objeto no se puede definir con un tipo incompleto. Puede declarar un objeto con un tipo incompleto y definirlo más adelante cuando esté completo (fuera de la clase).

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 };

vea esto aquí: http://coliru.stacked-crooked.com/a/f43395e5d08a3952

Esto no funciona para los miembros constexpr , sin embargo.