h_323 (h_323) wrote,
h_323
h_323

Страшная правда о union'ах

И так бывает:
template <typename T>
union Foo {
public:
  Foo() {}
  Foo(const T& value) : _val(value) {}

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

  unsigned int size() const {
    return sizeof(T);
  }

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

private:
  T _val;
  char _tab[sizeof(T)];
}

К сожалению параметризовать можно только POD-типом, что несколько снижает удовольствие. Никаких извращений не подразумевается. Например, std::bitset позволяил бы доступиться до битов (в известных мне реализациях). Никто не собирается подсовывать Правда, в C++0x появились некие послабления в виде unrestricted unuion'ов. Но на данный момент их поддерживает только GCC 4.6 еще не щупанный мной. Ну, конечно, можно пользовать Boost.Variant, чтобы вообще не заморачиваться ограничениями.
Tags: cpp, stackoverflow
Subscribe
  • Post a new comment

    Error

    default userpic
  • 0 comments