C++中的Union是可行的

Vij*_*jay 22 c++ unions

C++中的联合可以有成员函数吗?如果创建对象,如何存在与数据成员和成员函数的联合?

如果我认为是,那么它们在任何地方都是可行的.如果是,那么在哪里?

Eri*_*rik 33

9.5/1

联合可以具有成员函数(包括构造函数和析构函数),但不具有虚函数(10.3).工会不得有基类.联合不得用作基类.具有非平凡构造函数(12.1),非平凡复制构造函数(12.8),非平凡析构函数(12.4)或非平凡复制赋值运算符(13.5.3,12.8)的类的对象不能是一个联盟的成员,也不是一系列这样的对象

你是什​​么意思?如果创建了一个对象,如何存在与数据成员和成员函数的联合?成员函数(非虚拟)在任何类/联合的实例中不占用空间.


Err*_*ata 10

您还可以创建模板联合:

template <typename T>
union Foo {
public:
  Foo() {}
  Foo(const T& value) : _val(value) {}

  const char* data() const {
    return _tab;
  }

  std::size_t size() const {
    return sizeof(T);
  }

  char operator[](unsigned int index) const {
      return _tab[index];
  }

private:
  T _val;
  char _tab[sizeof(T)];
}
Run Code Online (Sandbox Code Playgroud)