在哪里放置PRIVATE嵌套(内部)类的非成员函数定义?

时间:2019-02-05 10:55:51

标签: c++ class c++11 inner-classes

以下是我实际问题的一个简单示例。我有使用定义的非成员函数      friend中的InnerClass关键字。此函数的定义应在InnerClass之外。

另一方面,类定义位于private的{​​{1}}下,因为我想专门为MyClass使用InnerClass

在这种情况下,我实际上可以在其中放置MyClass函数的定义吗?

friend

错误消息:

#include <iostream>

class MyClass
{
private:
    class InnerClass
    {
        int m_int;
    public:
        InnerClass(int i) :m_int(i) {}

        // non-member (friend) function, for which I need a definition outside the class!
        friend std::ostream& operator<<(std::ostream& output, const InnerClass &obj);
    };
    // ERROR: too many parameter for this operator
    std::ostream& operator<<(std::ostream& output, const InnerClass &obj)
    {
        return output << obj.m_int << " ";
    }

private:
    InnerClass m_innerClass;

public:
    explicit MyClass(int i) : m_innerClass{ i } {}
    friend std::ostream& operator<<(std::ostream& output, const MyClass &obj);
};

std::ostream& operator<<(std::ostream& output, const MyClass &obj)
{
    output << obj.m_innerClass << std::endl;
}


int main()
{
    MyClass classObj{ 2 };
    std::cout << classObj;
    return 0;
}

1 个答案:

答案 0 :(得分:3)

您实际上可以在类定义内定义朋友非成员函数。

这是您的固定代码段:

def get_count(self,request):
    this = self.id
    q = Attendee.objects.get(pk=this).count()
    return q

您可以与其他#include <iostream> class MyClass { private: class InnerClass { int m_int; public: InnerClass(int i) :m_int(i) {} // non-member (friend) function, which we can define right here friend std::ostream& operator<<(std::ostream& output, const InnerClass &obj) { return output << obj.m_int << " "; } }; private: InnerClass m_innerClass; public: explicit MyClass(int i) : m_innerClass{ i } {} friend std::ostream& operator<<(std::ostream& output, const MyClass &obj); }; std::ostream& operator<<(std::ostream& output, const MyClass &obj) { return output << obj.m_innerClass << std::endl; } int main() { MyClass classObj{ 2 }; std::cout << classObj; return 0; } 进行相同操作。

现在,如果operator<<不是私有的,您仍然可以在全局范围内定义函数,但是您需要完全限定第二个参数的名称:

InnerClass