我通过设计使用boost(反)序列化来重构没有公共默认ctor的类。我声明了一个私有的默认ctor并将boost访问类声明为好友,并且它将默认ctor用作其反序列化过程的一部分。但是除非我将默认的ctor公开,否则它无法重构std::pair
。我宁愿宣布友谊,但我不知道如何。
下面是一个简化的示例:
class PrivateDC
{
private:
friend class PrivateDCFriend;
friend struct std::pair<int, PrivateDC>;
PrivateDC() = default;
};
class PrivateDCFriend
{
void f() const
{
PrivateDC a; // this works, proves friendship
std::pair<int, PrivateDC> b; // gets compile error
}
};
错误是“没有匹配的构造函数,无法初始化'std :: pair '”。如果默认的ctor是public,我不会收到错误消息。
如何声明
std::pair
为朋友,这样可以正常工作? 最佳答案
你不能std::pair<T, U>
的默认构造要求T
和U
都为DefaultConstructible,而PrivateDC
都不是,否则,将导致std::pair
的默认构造函数被从重载集中排除。