我如何将std :: pair声明为朋友,以便看到私有默认ctor

时间:2018-11-07 23:32:13

标签: c++ c++11 private friend std-pair

根据设计,我正在使用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为朋友,这样才能正常工作?

1 个答案:

答案 0 :(得分:2)

你不能,

std::pair<T, U>的默认构造要求DefaultConstructibleT均为https://support.google.com/googleplay/android-developer/answer/6346149#increase,而U则不是PrivateDC,否则,将导致{ {1}}被从过载集中排除。