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.