Tôi đang cập nhật cấu trúc của tôi và tôi muốn thêm một thành viên chuỗi :: std vào nó. Các cấu trúc ban đầu trông như thế này:C++ 11 liên kết ẩn danh với các thành viên không tầm thường
struct Value {
uint64_t lastUpdated;
union {
uint64_t ui;
int64_t i;
float f;
bool b;
};
};
Chỉ cần thêm một thành viên std :: string để công đoàn, tất nhiên, gây ra một lỗi biên dịch, bởi vì một thường sẽ cần phải thêm các nhà thầu không tầm thường của đối tượng. 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.
Sau đó trang web tiếp tục cung cấp cho các mẫu mã sau:
union U
{
int a;
int b;
string s;
U();
~U();
};
Tuy nhiên, tôi đang sử dụng một công đoàn vô danh trong một cấu trúc. Tôi hỏi ## C++ trên freenode và họ nói với tôi một cách chính xác để làm điều đó là để đưa các nhà xây dựng trong struct thay vào đó và đã cho tôi mã ví dụ này:
#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)
{
}
Nhưng từ đó tôi không thể hình dung làm thế nào để làm cho phần còn lại của các chức năng đặc biệt mà std :: string cần xác định, và hơn nữa, tôi không hoàn toàn rõ ràng về cách ctor trong ví dụ đó đang làm việc.
Tôi có thể nhờ ai đó giải thích điều này cho tôi một chút rõ ràng hơn không?
Dường như với tôi như những gì bạn cần là một [biến thể] thích hợp (http://www.boost.org/libs/variant/) ... – ildjarn
Tôi đã có một lớp biến thể mà tôi đang sử dụng ở nơi khác . Tôi không sử dụng nó trong trường hợp này, vì đây là dữ liệu tuần tự trên mạng và tôi muốn giữ dữ liệu nhỏ, vì vậy mọi thứ mà Biến thể giữ nội bộ (như nhập thông tin) vào lớp tôi muốn giữ bên ngoài và quyết định những gì dựa trên lược đồ gói. – OmnipotentEntity