| 查看: 557 | 回复: 4 | ||
lixy1217木虫 (著名写手)
|
[求助]
关于C++类模板的问题 已有2人参与
|
|
如果我定义了一个类模板 A<type>, 那么会出现一个问题,就是A<double> 不能调用A<int>里的私有变量 当然可以定义一个friend A<double>,就可以了 但问题是,我希望所有类型的 A 模板都可以调用任何其它类型 A 模板的私有变量,请问这一点能做到吗? |
» 猜你喜欢
基金申报
已经有5人回复
基金委咋了?2026年的指南还没有出来?
已经有7人回复
国自然申请面上模板最新2026版出了吗?
已经有17人回复
纳米粒子粒径的测量
已经有8人回复
疑惑?
已经有5人回复
计算机、0854电子信息(085401-058412)调剂
已经有5人回复
Materials Today Chemistry审稿周期
已经有5人回复
溴的反应液脱色
已经有7人回复
推荐一本书
已经有12人回复
常年博士招收(双一流,工科)
已经有4人回复
» 本主题相关价值贴推荐,对您同样有帮助:
JAVA 和C++的部分区别
已经有2人回复
【转帖】Windows下编写Qt插件
已经有0人回复
【分享】数据结构算法与应用 C++语言描述
已经有9人回复

baghnac
金虫 (小有名气)
- 应助: 14 (小学生)
- 金币: 1706.4
- 红花: 6
- 帖子: 177
- 在线: 44小时
- 虫号: 1365578
- 注册: 2011-08-11
- 性别: GG
- 专业: 宇宙学
【答案】应助回帖
|
从模板函数分析,私有变量有: 1. 局部变量 2. 静态变量 局部变量: 局部变量是运行时在堆栈里的,每次运行都不一定一样 也就是说可能会同时运行两个A<int>,而里面的局部变量值不一样,这与type无关 静态变量: 从现象来看,由于不同类型实际上是不同函数签名的函数,所以不同函数里的静态变量是独立的,不能互相访问 除非改成全局的 ------------------------------------------------------------------------- 模板类型以上类似,感觉也是生成两个不同的实例,所以其私有变量是不能相互访问的,否则就不是私有变量了 |

2楼2016-02-06 09:26:43
【答案】应助回帖
|
使用template<class Typ> friend class A;的语法就可以绑定类模板的全部实例。 给出一个参考程序。 #include <iostream> using namespace std; template<class T> class A { template<class Typ> friend class A; public: template<class Typ> Typ somefunc(A<Typ>& obj) { return obj.k; } private: T k; }; int main() { A<int> ai; A<double> ad; cout<< ad.somefunc(ai); system("pause" ;return 0; } 在Visual Studio 2013中编译通过 |
3楼2016-02-24 01:55:28
4楼2016-02-24 02:03:28
【答案】应助回帖
|
想起来了。如果是友元自己,就不需要用template关键字,虽然用了也不错。友元别的模板类的全部实例。就需要使用template,而且模板参数的名字不与当前类的模板参数名字一样。就像我3楼的程序。 #include <iostream> using namespace std; template<class T> class A { friend class A; template<class Typ> friend class B; // 友元B的全部实例,模板参数Typ与A的模板参数T不一样即可。 public: template<class Typ> Typ somefunc(A<Typ>& obj) { return obj.k; } private: T k; }; template<class T> class B { public: template<class Typ> Typ somefunc2(A<Typ>& obj) { return obj.k; } private: T k; }; int main() { A<int> ai; B<double> ad; cout << ad.somefunc2(ai); system("pause" ;return 0; } 也是在Visual Studio 2013中编译通过。这种称为非绑定友元。 |
5楼2016-02-24 02:18:46











回复此楼
;