以下是我实际问题的一个简单示例。我有使用定义的非成员函数
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;
}
答案 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