根据设计,我正在使用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
如何声明std::pair
为朋友,这样才能正常工作?
答案 0 :(得分:2)
你不能,
std::pair<T, U>
的默认构造要求DefaultConstructible和T
均为https://support.google.com/googleplay/android-developer/answer/6346149#increase,而U
则不是PrivateDC
,否则,将导致{ {1}}被从过载集中排除。