ano*_*ous 1 c++ templates friend
我正在调试一个与第三方库交互的应用程序,其代码不可用,只有头文件和 .so 可用。现在我可以将它加载到调试器中并检查在第三方库中声明的类的私有成员的变量值,但是由于对象的数量很大,我想创建一些机制来在控制台上打印它,我可以稍后分析。我想出了这样的事情
第三方头文件
class A
{
private:
int i;
};
Run Code Online (Sandbox Code Playgroud)
我没有在上面的课程中包含额外的细节
调试打印机.cpp
#include <thirdpartheaders>
template <typename T> class debugprinter
{
friend class T;
public :
void printonconsole()
{
T a;
std::cout << std::endl << a.i << std::endl;
return;
}
}
Run Code Online (Sandbox Code Playgroud)
现在我试图在上面编译,但似乎我不能将未定义的类型 T 声明为我的模板类的朋友并得到这个错误
错误:无法从 x::acc() 访问 i
现在我可以通过创建非模板调试打印机来解决这个问题,但出于好奇,有没有一种方法可以创建一个模板类,它会成为它的输入类型参数的朋友?
谢谢
声明A为 的朋友无济于事debugprinter<A>。这种friend关系不是对称的。这种关系只是一种方式。如果您想访问 的私人成员,则需要debugprinter<A>成为 的朋友。为此,您需要修改类本身。AAA
这就像现实世界的友谊。你不能强迫别人成为你的朋友。你只能对别人表现友好。