Benim bir yapı güncelleştiriliyor ve bir std :: string üyesi eklemek istedim. Orijinal yapı şuna benzer: Bir normalde nesnenin önemsiz olmayan kurucular eklemeniz gerekir çünkü C++ 11 önemsiz üyeler ile anonim birliği
struct Value {
uint64_t lastUpdated;
union {
uint64_t ui;
int64_t i;
float f;
bool b;
};
};
Sadece birliğe bir std :: string üyenin eklenmesini
, tabii ki, bir derleme hatasına neden olur. Ancak, ben bir yapı içinde anonim birliği kullanıyorumunion U
{
int a;
int b;
string s;
U();
~U();
};
: In the case of std::string (text from informit.com)
Since std::string defines all of the six special member functions, U will have an implicitly deleted default constructor, copy constructor, copy assignment operator, move constructor, move assignment operator and destructor. Effectively, this means that you can't create instances of U unless you define some, or all of the special member functions explicitly.
Ardından web sitesi aşağıdaki örnek kodu vermek devam ediyor. Ben freenode ## C++ istedi ve bana bunun yerine yapı içinde yapıcı koymak oldu yapmanın doğru yolu anlattı ve bana bu örnek kod verdi:
#include <new>
struct Point {
Point() {}
Point(int x, int y): x_(x), y_(y) {}
int x_, y_;
};
struct Foo
{
Foo() { new(&p) Point(); }
union {
int z;
double w;
Point p;
};
};
int main(void)
{
}
Ama oradan ben nasıl bilemiyorum std :: string'in tanımlanması gereken özel işlevlerin geri kalanını yapmak ve dahası, bu örnekte ctorun nasıl çalıştığına dair tam olarak net değilim.
Bunu bana açıklayabilecek birini bulabilir miyim?
İhtiyacınız olan şey nedir? _really_ ihtiyacı uygun bir [varyant] (http://www.boost.org/libs/variant/) ... – ildjarn
Zaten başka bir yerde kullanıyorum varyant sınıfım var . Bu durumda kullanmıyorum, çünkü bu bir ağdaki serileştirilmiş veriler içindir ve veriyi küçük tutmak istedim, bu yüzden bir Variant'ın her şeyi dışarıda tutmak istediğim sınıfa içsel (yazılı bilgi yazmak gibi) her şeyi tutar ve karar verir paket şemasına dayanan nedir? – OmnipotentEntity