24小时热门版块排行榜    

北京石油化工学院2026年研究生招生接收调剂公告
查看: 581  |  回复: 4
当前只显示满足指定条件的回帖,点击这里查看本话题的所有回帖

lixy1217

木虫 (著名写手)

[求助] 关于C++类模板的问题 已有2人参与

如果我定义了一个类模板 A<type>,
那么会出现一个问题,就是A<double> 不能调用A<int>里的私有变量
当然可以定义一个friend A<double>,就可以了


但问题是,我希望所有类型的 A 模板都可以调用任何其它类型 A 模板的私有变量,请问这一点能做到吗?
回复此楼

» 猜你喜欢

» 本主题相关价值贴推荐,对您同样有帮助:

偶尔敞开心扉,世界将不再孤独
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

几罗星人

新虫 (初入文坛)

【答案】应助回帖

想起来了。如果是友元自己,就不需要用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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
查看全部 5 个回答

baghnac

金虫 (小有名气)

【答案】应助回帖

从模板函数分析,私有变量有:
  1. 局部变量
  2. 静态变量

局部变量:
局部变量是运行时在堆栈里的,每次运行都不一定一样
也就是说可能会同时运行两个A<int>,而里面的局部变量值不一样,这与type无关

静态变量:
从现象来看,由于不同类型实际上是不同函数签名的函数,所以不同函数里的静态变量是独立的,不能互相访问
除非改成全局的
-------------------------------------------------------------------------
模板类型以上类似,感觉也是生成两个不同的实例,所以其私有变量是不能相互访问的,否则就不是私有变量了
Beagreathackernotacracker!
2楼2016-02-06 09:26:43
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

几罗星人

新虫 (初入文坛)

【答案】应助回帖

使用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
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

几罗星人

新虫 (初入文坛)

【答案】应助回帖

★ ★ ★ ★ ★
lixy1217: 金币+5, 有帮助, 呵呵,我已经知道这个了,其实解决的方法就是这么简单,还是感谢参与~~ 2016-02-24 11:58:02
打错了。直接用friend class A;就可以了。而在B类友元A类所有实例我记得好像也是可以的,突然忘了。
4楼2016-02-24 02:03:28
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考研] 282求调剂 +13 呼吸都是减肥 2026-04-01 13/650 2026-04-02 14:10 by baoball
[考研] 324求调剂 +6 想上学求调 2026-04-02 6/300 2026-04-02 13:48 by SZW_UJN
[考研] 298求调剂 +3 zzz,,r 2026-04-02 3/150 2026-04-02 13:35 by medici蒙
[考研] 311求调剂 +9 勇敢的小吴 2026-04-02 9/450 2026-04-02 11:37 by Sammy2
[考研] 266求调剂 +10 阳阳哇塞 2026-04-01 10/500 2026-04-02 09:07 by vgtyfty
[考研] 336求调剂 +5 kiyy 2026-04-01 5/250 2026-04-02 07:14 by chixmc
[考研] 材料调剂 +14 一样YWY 2026-04-01 14/700 2026-04-01 21:07 by lijunpoly
[考研] 284求调剂 +12 小熊~~ 2026-03-31 12/600 2026-04-01 20:23 by 花??
[考研] 0710生物学考研调剂 +3 李多米lee. 2026-03-27 4/200 2026-04-01 16:21 by zzchen2000
[考研] 求调剂 +4 DADA怪 2026-03-31 4/200 2026-04-01 14:30 by ZXlzxl0425
[考研] 考研生物与医药调剂 +7 铁憨憨123425 2026-03-31 7/350 2026-04-01 08:45 by JourneyLucky
[考研] 合肥区域性重点一本招收调剂 +4 6266jl 2026-03-30 8/400 2026-03-31 18:43 by 6266jl
[考研] 070300化学354求调剂 +15 101次希望 2026-03-28 15/750 2026-03-31 17:58 by jp9609
[考研] 289求调剂 +3 Acesczlo 2026-03-29 4/200 2026-03-31 14:48 by 热情沙漠
[考研] 求调剂 +8 11ggg 2026-03-30 8/400 2026-03-31 13:56 by nanaliuyun
[考研] 食品工程专硕一志愿中海洋309求调剂 +5 小张zxy张 2026-03-26 10/500 2026-03-31 00:29 by jp9609
[考研] 279求调剂 +12 j的立方 2026-03-29 12/600 2026-03-30 20:30 by dick_runner
[考研] 317分 一志愿南理工材料工程 本科湖工大 求调剂 +12 芋泥小铃铛 2026-03-28 12/600 2026-03-30 17:06 by wangjy2002
[考研] 0703 化学 求调剂,一志愿山东大学 342 分 +7 Shern—- 2026-03-28 7/350 2026-03-30 16:31 by nothing投稿中
[考研] 265求调剂 +8 小木虫085600 2026-03-27 8/400 2026-03-27 22:16 by 无际的草原
信息提示
请填处理意见