İlk sorumu yazarken, bu mümkün olsa bile, temiz çözümün C++ ile mümkün olmadığını açıkça belirten static constexpr member of same type as class being defined sorusu üzerine tökezledim 11.Sınıf olarak tanımlanmış aynı türdeki statik constexpr üyeleri (ek ayrıntılar)
Ama sonra gönderen oldukça yakın olan bu kod ile geldi ve ben başarmak istiyorum:
Yaniclass MyEnum
{
public:
constexpr MyEnum() : m_null(true), m_value(0) { }
constexpr MyEnum(const unsigned int v) : m_null(false), m_value(v) { }
constexpr operator unsigned int() const { return m_value; }
static constexpr const MyEnum one() { return MyEnum(1); }
private:
bool m_null;
unsigned int m_value;
};
Sorumu rephrasing ediyorum: one
derleme için çözüm yapar ve neden olabilir beklediğiniz gibi kullanılmalı, ancak aşağıdaki çözümler eksik bir sınıfın kullanılmasıyla ilgili hatalar veriyor? @dyp belirtildiği gibi işlev tanımları sınıf vücut sonra derlenen için
class MyEnum
{
public:
// snip...
static constexpr const MyEnum two = MyEnum(2);
static constexpr const MyEnum three = 3;
// snip...
}
Üye işlev gövdeleri, sınıf tanımından sonra bulundukları gibi derlenir. Yani, sınıf üye işlev gövdeleri içinde tamamlanır. (Ayrıca bakınız [CWG 1255] (http://www.open-std.org/JTC1/SC22/WG21/docs/cwg_active.html#1255)) – dyp