C++ Скажем, у меня есть некоторые данные, выделенные где-то в моей программе, как:с босыми Приведение типов данных в обертке
some_type a;
, и я хочу, чтобы обернуть эти данные в классе для доступа. Справедливо ли сказать,
class Foo {
private:
some_type _val;
public:
inline void doSomething() { c_doSomething(&_val); }
}
Foo *x = reinterpret_cast<Foo *>(&a);
x->double();
Класс не имеет виртуальные функции, и включает в себя только один элемент данных типа я пытаюсь обернуть. Указывает ли стандарт C++, что этот reinterpret_cast
является безопасным и действительным? sizeof(Foo) == sizeof(some_type)
, проблемы с выравниванием адресов или что-нибудь еще? (В моем случае я был бы уверен, что some_type
является либо примитивным типом, например int
, либо структурой POD, но мне любопытно, что произойдет, если мы не будем применять это ограничение, например, производный класс a UIWidget
как UIMenuItem
, или что-то.)
Спасибо!
Спасибо, это кажется довольно окончательным. –