C++0x的template alias以及using



typedef template用于将一个较抽象的template "alias" 成一个较具体的 template。大体上是这样:

template <typename T> 
class A 
{ 
private:
    T  a;
};

如果T本身也可以是template的,那么你很可能想到这样:

template <typename T>
typedef A<XXX<T> > B;

这里面一个A template被具体化到其一个成员的template,遗憾的是,上述语法在 C++里面是非法 的。C++0x(2.0)用using关键字提供了上述支持,大体上是这样:

template< typename First, typename Second, int third>
class SomeType;

template< typename Second>
using TypedefName = SomeType<OtherType, Second, 5>;

详见: http://en.wikipedia.org/wiki/C%2B%2B0x#Template_aliases

另外,using还可以用来publish基类的protected方法:

class Base:
{
protected:
    void Method();
};

class D:public Base
{
public:
    using Base::Method;
};

在某些实现中(据说是vc),直接在子类里面public声明基类的protected方法就 能起到publish的作用,但是合乎标准的做法如上。这个我孤陋寡闻,以前居然 也没注意到。


ps:感谢水木网友hadoop的提示。

Author: qingant <qingant@gmail.com>

Date: 2011-06-12 Sun

HTML generated by org-mode 6.33x in emacs 23

posted on 2011-07-22 00:31 qingant 阅读(2150) 评论(1)  编辑 收藏 引用

评论

# re: C++0x的template alias以及using 2011-07-27 01:54 fklz

using TypedefName 这个VC10也都不支持啊!日  回复  更多评论   


只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   知识库   博问   管理


导航

<2011年6月>
2930311234
567891011
12131415161718
19202122232425
262728293012
3456789

统计

常用链接

留言簿(3)

随笔档案

相册

最新随笔

搜索

最新随笔

最新评论

阅读排行榜

评论排行榜