24小时热门版块排行榜    

Znn3bq.jpeg
查看: 618  |  回复: 4

lixy1217

木虫 (著名写手)

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

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


但问题是,我希望所有类型的 A 模板都可以调用任何其它类型 A 模板的私有变量,请问这一点能做到吗?
回复此楼
偶尔敞开心扉,世界将不再孤独
已阅   回复此楼   关注TA 给TA发消息 送TA红花 TA的回帖

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的回帖

几罗星人

新虫 (初入文坛)

【答案】应助回帖

想起来了。如果是友元自己,就不需要用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的回帖
相关版块跳转 我要订阅楼主 lixy1217 的主题更新
最具人气热帖推荐 [查看全部] 作者 回/看 最后发表
[考博] 化学专业申博 +3 赵子羊 2026-05-23 4/200 2026-05-24 18:10 by 工大学长
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 1rx34o113h 2026-05-23 3/150 2026-05-24 17:41 by 0i3mu4vkjz
[教师之家] 论文撤稿了 +4 bjvtcliu 2026-05-24 7/350 2026-05-24 17:29 by bjvtcliu
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 hvkbtfonbv 2026-05-23 4/200 2026-05-24 17:21 by 75ui6h7z2t
[博后之家] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 hvkbtfonbv 2026-05-23 3/150 2026-05-24 17:10 by 75ui6h7z2t
[考博] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 hvkbtfonbv 2026-05-23 3/150 2026-05-24 17:01 by 75ui6h7z2t
[考研] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 a2tycdlnq1 2026-05-23 5/250 2026-05-24 16:21 by hhx1yx9evi
[论文投稿] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +3 a2tycdlnq1 2026-05-23 4/200 2026-05-24 16:16 by hhx1yx9evi
[硕博家园] 售SCI一区T0P文章,我:8.O.5.5.1.O.5.4,科目齐全,可+急 +4 pmo95bazuy 2026-05-23 8/400 2026-05-24 15:56 by 1uy1ht2y9r
[基金申请] 西安交大新媒学院副院长用撤稿论文结题 +3 bjvtcliu 2026-05-24 5/250 2026-05-24 10:16 by kudofaye
[教师之家] 某211大学教师把个人教师官方主页改成:我跑了我跑了我跑了!官宣跑路! +4 zju2000 2026-05-21 5/250 2026-05-24 09:35 by songwz
[考博] 26/27申博自荐 10+4 ZXW0202 2026-05-22 9/450 2026-05-24 08:47 by bjvtcliu
[基金申请] 青B发送上会通知了吗 +5 chemBioBro 2026-05-22 7/350 2026-05-23 12:35 by zhuifengzhy
[考博] 博士申请 +3 焦晓明 2026-05-21 3/150 2026-05-23 11:26 by mlc840311
[论文投稿] 投稿求助,期刊 +4 希冀,有书读 2026-05-20 8/400 2026-05-22 10:16 by 希冀,有书读
[文学芳草园] 献血感触 +7 呀呀好傻 2026-05-19 13/650 2026-05-21 20:15 by 呀呀好傻
[基金申请] 提交了我也来说说感想 +9 fummck 2026-05-20 10/500 2026-05-21 14:17 by draco1987
[有机交流] 反应很差,大量原料没有反应 5+3 Mr.Zot 2026-05-19 8/400 2026-05-20 22:19 by Equinoxhua
[考博] 如果工作了想读博,可以边工作边读全日制嘛? 30+3 铁达火车 2026-05-18 5/250 2026-05-20 09:33 by tfang
[考博] 博士申请 +5 星…… 2026-05-18 6/300 2026-05-18 23:49 by 糊糊涂涂好
信息提示
请填处理意见