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 @ 2011-07-22 00:31 qingant 阅读(2144) | 评论 (1)编辑 收藏
以前一直疑惑,为啥不是一层层的unwinding,而是要在找到一个handle并把控制权转移到catch块这里再unwinding。想了想是这样:
1.保存异常抛出点的现场(也就是stack)是有用的,比方说,在handle里面就有可能一层一层往回遍历stack frame,像python的sys.get_frame
2.exception对象就在顶层stack frame上,一unwinding,就给unwinding没有了,如果找个地方给保存下来,那么这个exception对象是要拷贝构造的,问题就复杂了(当然catch的时候也是要拷贝构造)。
3.未catch的异常是不是会去stack unwinding是依赖实现的,因此,要保证resource cleanup,就应该自己搞个入口函数,这个入口函数在main里面一个try块里面调用,捕获所有异常
4.static和全局变量的异常安全问题,static和全局变量初始化时候抛出异常,构造完成的其他static和全局变量不一定会被析构(实现定义),所以最好用local static变量,然后自己处理其初始化。
posted @ 2011-07-17 04:09 qingant 阅读(2558) | 评论 (2)编辑 收藏

https://bitbucket.org/qingant/fs_monitor/

  这个东东的预期用来做的事情就是同步,当然,本质上你可以注册任何回调事
  件到上面,做任何事情。我一直需要这么一个工具,最重要的是两个需求,一
  个是自动在本地和虚拟机之间进行同步,一个是在hg commit的时候自动帮我
  push到bitbucket,并且需要是近似实时的,那么rsyncd就不行,就需要
  inotify这样的事件驱动的机制,这个机制在FreeBSD/OS X下就是kqueue了,刚
  好最近要搞一搞kqueue/epoll/pollset。
posted @ 2011-06-12 07:18 qingant 阅读(298) | 评论 (0)编辑 收藏

用metaWeblog协议 发表博客

用metaWeblog协议发表博客

1 在org-mode发表博客到cppblog

cppblog实现了metaWeblog,所以可以通过xmlrpc发表博客文章,python里面 做这个事情的包也就叫xmlrpc,一行代码胜千言,基本上就是用python写了个 函数发表文章,这个函数被一个elisp函数通过pymacs调用。

# -*- coding: utf-8 -*-
import xmlrpclib

def post(title, content):
user = 'qingant'


passwd = 'xxxx'

url = 'http://www.cppblog.com/qingant/services/metaweblog.aspx'

server = xmlrpclib.Server(url)

post = {'title':'test',
'link':'',
"description":u"人民民主万岁",
"author":"qingant@gmail.com",
"category":"test",
}
post['title'] = title
post["description"] = content
res = server.metaWeblog.newPost("", user, passwd, post, True )
print res

elisp就不展示了,无关宏旨:-)

Author: qingant <qingant@gmail.com>

Date: 2010-02-17 02:03:08

HTML generated by org-mode 6.21b in emacs 23

posted @ 2010-02-17 02:36 qingant 阅读(534) | 评论 (0)编辑 收藏
仅列出标题
共2页: 1 2 

导航

<2024年4月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(3)

随笔档案

相册

最新随笔

搜索

最新随笔

最新评论

阅读排行榜

评论排行榜