gpt4 book ai didi

c++ - 在公共(public)成员函数中访问私有(private)成员变量

转载 作者:太空狗 更新时间:2023-10-29 20:37:45 27 4
gpt4 key购买 nike

在函数 myfun 中,有没有一种方法可以访问 rhs.var 而无需编写返回 var 的公共(public)函数?另外,据我所知,发生这种情况是因为 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);
}

最佳答案

建议的解决方案

您可以为您的私有(private)成员变量提供公共(public)访问器:

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();
^^^^^^^^
}
};

或者正如 Dieter 在评论中提到的那样,您可以让您的模板类成为 friend :

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;
}
};

概览

模板成员函数的原因myfun未被授权访问私有(private)成员变量 var类模板 foo 是编译器解释 class foo<Type>class foo<T>作为完全不同的类类型,即使它们源自相同的模板类定义。因此,作为不同的类类型,一个不能访问另一个的私有(private)成员。

关于c++ - 在公共(public)成员函数中访问私有(private)成员变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33925399/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com