(除了first
和second
具有不同含义的事实 - 这个问题可以被抑制。)
这与我的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_object
和extended_named_object
相似。实际上,他们的数据布局应该是相同的。 [在编辑中添加] 通过将std::pair
个基础设为私有,我避免暴露first
和second
方法,这确实会返回完全不同的东西。
他们之间reinterpret_cast<>
安全吗?如何在编译时确定(使用static_assert(what here?)
)它是什么?
注意 object
和more_data
的对齐均为8。