C++ 在公共成员函数中访问私有成员变量
在functionC++ 在公共成员函数中访问私有成员变量,c++,class,templates,C++,Class,Templates,在functionmyfun中,是否有一种方法可以访问rhs.var,而无需编写返回var的公共函数?另外,据我所知,发生这种情况是因为rhs可能是另一种类型。。。这是正确的吗 #include <iostream> template<class T> class foo { private: T var; public: foo(T v) : var(v) {} template<class Type> void myf
myfun
中,是否有一种方法可以访问rhs.var
,而无需编写返回var
的公共函数?另外,据我所知,发生这种情况是因为rhs
可能是另一种类型。。。这是正确的吗
#include <iostream>
template<class T>
class foo
{
private:
T var;
public:
foo(T v) : var(v) {}
template<class Type>
void myfun(foo<Type>& rhs)
{
auto i = rhs.var; //BOOM
}
};
int main()
{
foo<int> a = 5;
foo<double> b = 2.2;
a.myfun(b);
}
#包括
模板
福班
{
私人:
T-var;
公众:
foo(tv):var(v){}
模板
void myfun(foo和rhs)
{
自动i=rhs.var;//动臂
}
};
int main()
{
fooa=5;
foob=2.2;
a、 myfun(b);
}
您可以将第二种类型定义为:
template<class T>
class foo
{
private:
T var;
public:
foo(T v) : var(v) {}
template<class Type>
void myfun(foo<Type>& rhs)
{
auto i = rhs.var; //BOOM
}
template<class Type>
friend class foo;
};
模板
福班
{
私人:
T-var;
公众:
foo(tv):var(v){}
模板
void myfun(foo和rhs)
{
自动i=rhs.var;//动臂
}
模板
朋友班富;
};
建议的解决方案
您可以为私有成员变量提供公共访问器:
template<class T>
class foo {
T var;
public:
foo(T v) : var(v) {}
T getVar() const { return var; }
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
template<class Type>
void myfun(foo<Type>& rhs) {
auto i = rhs.getVar();
^^^^^^^^
}
};
模板
福班{
T-var;
公众:
foo(tv):var(v){}
T getVar()常量{return var;}
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
模板
void myfun(foo和rhs){
auto i=rhs.getVar();
^^^^^^^^
}
};
或者,正如Dieter在评论中提到的那样,您可以让您的模板类成为朋友:
template<class T>
class foo {
T var;
template <class> friend class foo;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
public:
foo(T v) : var(v) {}
template<class Type>
void myfun(foo<Type>& rhs) {
auto i = rhs.var;
}
};
模板
福班{
T-var;
模板好友类foo;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
公众:
foo(tv):var(v){}
模板
void myfun(foo和rhs){
自动i=rhs.var;
}
};
概述
模板成员函数
myfun
未被授予访问类模板foo的私有成员变量var
的权限的原因是编译器将class foo
和class foo
解释为完全不同的类类型,即使它们来自同一模板类定义。因此,作为不同的类类型,一个不能访问另一个的私有成员 您可以使用模板好友类foo代码>里面foo
@Dieter Lücking这么简单。。。从未想过你甚至可以删除U
,模板好友类foo代码>