什么时候可以重新解释一对<a,b:c>作为一对<a,b>:C?</a,b> </a,b:c>

时间:2014-05-01 13:16:42

标签: c++ derived-class reinterpret-cast

(除了firstsecond具有不同含义的事实 - 这个问题可以被抑制。)

这与我的previous question有关。假设我有以下类

struct object { /* some data */ };           // sizeof(object)   ==multiple of 16
struct more_data { /* some other data */ };  // sizeof(more_data)==multiple of 16
struct extended_object : object, more_data {};

struct named_object : private std::pair<std::string,object>
{
  std::string const&name() const { return first; }
  operator object const&() const { return second; }
};

struct named_extended_object : private std::pair<std::string,extended_object>
{
  std::string const&name() const { return first; }
  operator object const&() const { return second; }
  operator more_data const&() const { return second; }
}
struct extended_named_object : named_object, more_data {};

然后named_extended_objectextended_named_object相似。实际上,他们的数据布局应该是相同的。 [在编辑中添加] 通过将std::pair个基础设为私有,我避免暴露firstsecond方法,这确实会返回完全不同的东西。

他们之间reinterpret_cast<>安全吗?如何在编译时确定(使用static_assert(what here?))它是什么?

注意 objectmore_data的对齐均为8。

0 个答案:

没有答案