模板友元化

摘要:

如何将一个函数模板的特化声明为友元呢?标准C++给你提供了两种合法的 语法。然而,事实上,对于其中的一种语法,几乎没有编译器对其给予支持;而对于另一种 ,当前所有主流编译器(除了一款以外)都对其提供了支持。

假设我们有一个函数模 板,可以调用其所操作的对象的SomethingPrivate()方法。特别地,考虑 boost::checked_delete()函数模板,它用以删除指定的对象——在它的实现中, 会调用该对象的析构函数:

namespace boost {
 template<typename T> void checked_delete( T* x ) {
  // ... 其它代码 ...
  delete x;
 }
}

现在,假设你想要在一个类中使用该函数模板,则该类中只 有一个私有的方法(析构函数):

class Test {
 ~Test() { }         // 私有的!
};
Test* t = new Test;
boost::checked_delete( t ); // 错误:
// Test 的析构函数是私有的,
// 因此checked_delete不能调用它 。   

解决方案很简单:只要令checked_delete()成为Test的友元即可。(其 它的方法都需要Test提供公共的析构函数)如何才能实现这个容易的解决方案呢?事实上, C++标准提供了2种方法来合法又便捷的实现它。

本文将提供一个现实的检验:在某个 命名空间中,友元化一个模板――说起来容易做起来难!(现实的编译器并未对标准有完好 的支持。)

总体来说,我有以下几条好消息和坏消息:

好消息:存在两种对 其支持得很好的符合标准的方法,它们的语法很平凡且不会使人困惑。

坏消息:没有 哪一种编译器对这两种标准语法提供完全的支持。甚至一些最健壮且几乎完全实现了C++标准 的编译器都不能对它们两个或其中之一提供完好的支持。

好消息(重复):我用来测 试它的当前的每一个编译器(除了gcc以外)都至少对二者之一有完好的支持。

让我 们再多花点儿时间来看看吧。

时间: 2024-09-09 07:55:29

模板友元化的相关文章

用友CELL软件如何实现动态报表模板的定制

问题描述 JSPJAVA如何实现通用动态报表模板的定制有数据库的操作越详细越好谢谢各位大神了

专访微软研究院张正友:从“张氏标定法”到人机交互,20年视觉技术的探索

张正友博士,是世界著名的计算机视觉和多媒体技术的专家,ACM Fellow,IEEE Fellow.他在立体视觉.三维重建.运动分析.图像配准.摄像机自标定等方面都有开创性的贡献. 张正友带领的微软研究院视觉团队在学术研究上做了大量的工作,除了在顶尖会议(比如CVPR.ICCV.ACM Multimedia.ICME)上发表了大量文章和几部专著,而且在微软很多产品里都有团队的贡献,比如Windows.Office.Xbox.Kinect.Skype for Business.Office Len

PHP资源模板——模板终结者

模板|终结者 "曾经有一份珍贵的模板摆在我的面前,我没有珍惜:直到别人都在用了,我才后悔莫及!如果上天能再给我一次机会,我会对这个模板说三个字--我用你.如果要问我用多久,我希望是--一万年."        --<模板终结者>题记 第一回 E时代群雄逐鹿,侠骨柔情英雄路 第一次接触"PHP模板技术"这个字眼,是在一则介绍PHPlib的模板类的书籍上面.由于当时我水平有限,无法理解那个template类的代码,所以一度跳过那一章,懒得去理解,眼不见心不烦

谈谈为何靠友链、外链提升网站排名已然成为过去式

还在怀念以前的日子,花一点小钱找几个网站挂上友情链接,等几天之后网站的关键词排名就上去了,还记得以前只需要每天不停的为网站发布外链,网站的名次就哗哗的向前升.而现在,不管站长你花再多的钱去购买友情链接,网站的排名就是不上去,不管站长你的外链几千几万,网站的排名还是不上去,这种靠友链.外链提升网站排名的方法已经成为了网站优化的过去式. 以前那种简单随便的优化网站的方法已经不适应现在的搜索引擎需要,现在搜索引擎需要的是货真价实的内容建设,我们可以看到很多高排名的网站他们的网站外链甚至不到10,但是网

和企业网站交换友链需要规避的两个风险浅析

  虽然互联网发展很快,有的企业主也意识到企业建设运营网站所能够带来的巨大机会,但是大部分的企业网站,依然只是展示平台,大部分仅仅是企业简介,产品展示,企业新闻,以及联系我们这几个栏目!而且这样的企业网站很多都是外包出去的,建设完成之后,基本上就不再进行维护了,除非偶尔更新一下企业的产品图片,对于这样的企业网站而言,我们是不是可以和他们进行友链呢?笔者以为,这个风险是很大的!下面就来介绍和这样的企业网站友链的两个风险! 一:企业网站被挂木马,影响到友链网站的权重 通常企业网站的建设渠道有两个,一

友链平台是新手站长最易接触的平台

友链平台是新手站长最易接触的平台 友链平台是新手站长最易接触的平台,无论是否是"借鸡生蛋",一个新人必须要学会去分析,接触一些东西.我现在基本上都谈不上是新手站长,因为我的网站模板都不是自己上传到服务器的,但我明白我要想做好自己的网站就要下功夫去研究,在我大二那年我就开始研究go9go.当初的时候还只是帮男朋友发布一些链接,其实刚开始我对这些友链平台还迷迷糊糊,后来慢慢的发现go9go可以给我带来不少外链,而且回复我消息的站长也都是同行业,同类的,这样的伙伴比铺天盖地的去寻找要有价值的

Blitz templates:最快的PHP模板引擎

最近接手的一项工作是重构职友集http://www.jobui.com和百才招聘http://www.baicai.com,找到一个非常快速的PHP模板引擎:Blitz Templates.顺便就花了1天时间翻译了一下它的文档,希望对大家有用! 文档路径:http://www.igaom.cn/blitz/Blitz_Docs.html 简介: Blitz templates 是一个用C语言开发的快速的PHP模板引擎,它是作为一个PHP的扩展功能.它开始作为一个php_templates更换,但

有没有c#的打印模板控件,这个模板需要软件使用者能自定义打印格式,支持连续打印

问题描述 有没有c#的打印模板控件,这个模板需要软件使用者能自定义打印格式,支持连续打印 搞一个进销存软件,要求入库单出库单的模板可以随时调整,并模板打印.暂时用EXCEL做模板,不过操作起来不是很舒服.有没有这样的控件啊~ 高手是不是都自定义这样的控件~~像用友 金蝶的进销存打印模板控件那样的~~~ 解决方案 我也是在找这个,LZ找到后,请告知处理办法 解决方案二: 我这里有一个 ,看下是否我发布到里面了,参考里面的资料,http://www.mskj.cc

让模板类网站重新让百度青睐的七种方法

中介交易 http://www.aliyun.com/zixun/aggregation/6858.html">SEO诊断 淘宝客 云主机 技术大厅 现在建设一个网站再简单不过了,跟再淘宝上开个网店似的,只要搞个模板和免费的建站cms系统就能够轻松的将网站搞定,然后就是采集内容,基本上几天就能够建设一个内容相当丰富的网站,可是这样的网站往往会要花很长的时间,百度才会收录,就算是收录后,网站也很难获得排名,一般都是在无底洞,对于这样的模板类网站,如何让百度青睐就成了众多站长的心病,下面我们就