Binding an overloaded function(std::tr1::bind 绑定一个被重载的函数)

绑定一个被重载的函数的企图通常对导致一个错误,因为无法表示到底要绑定哪一个重载版本。对于带有 const 和非 const 两个重载的成员函数来说,这是一个很常见的问题,就像这个简化的示例:

struct X
{
    int& get();
    int const& get() const;
};

int main()
{
    boost::bind( &X::get, _1 );
}

这里的二义性可以通过将(成员)函数指针强制转换到想要的类型来解决:

int main()
{
    boost::bind( static_cast< int const& (X::*) () const >( &X::get ), _1 );
}

另一个或许更可读的办法是引入一个临时变量:

int main()
{
    int const& (X::*get) () const = &X::get;
    boost::bind( get, _1 );
}

参考:http://cpp.ezbty.org/myfiles/boost/libs/bind/bind.html#err_overloaded

对象生死劫 - 构造函数和析构函数的异常(转)

构造函数和析构函数分别管理对象的建立和释放,负责对象的诞生和死亡的过程。当一个对象诞生时,构造函数负责创建并初始化对象的内部环境,包括分配内存、创建内部对象和打开相关的外部资源,等等。而当对象死亡时,析构函数负责关闭资源、释放内部的对象和已分配的内存。

在对象生死攸关的地方,如果程序代码出现问题,常常会发生内存泄漏,从而产生可能危害系统运行的孤魂野鬼。大量的事实表明,业务逻辑代码写得非常严谨的程序在运行中仍然发现存在内存泄露,大都是构造和析构部分的代码存在问题。

而许多程序员都习惯于面向对象的编程,需要时就建立一个对象,不用时就将其释放。这样的习惯简化了我们的思路,正是面向对象编程思想带来的好处。也许由于太习惯了,很多程序员都忽略了在对象生死的瞬间也可能产生异常的问题,这种现象却值得我们去认真反思。

继续阅读 »

__super

来自Microsoft的解释:

__super

Microsoft Specific

The __super keyword allows you to explicitly state that you are calling a base-class implementation for a function that you are overriding. All accessible base-class methods are considered during the overload resolution phase, and the function that provides the best match is the one that is called.

__super::member_function();

__super can only appear within the body of a member function.

With the introduction of attributes that inject code, your code might contain one or more base classes whose names you may not know but that contain methods that you wish to call.

Example

// deriv_super.cpp
struct B1 {
   void mf(int) {
      // ...
   }
};

struct B2 {
   void mf(short) {
      // ...
   }

   void mf(char) {
      // ...
   }
};

struct D : B1, B2 {
   void mf(short) {
      __super::mf(1);    // Calls B1::mf(int)
      __super::mf('s');  // Calls B2::mf(char)
   }
};

int main() {
}

END Microsoft Specific

中文意思:

__super是编译器关键词,是一个辅助工具,在多重继承和多级继承环境下很方便,当你需要调用基类成员时,不需要你记忆这个成员到底是哪个基类提供的,编译器会帮你找到正确的基类。如果存在二义性(比如有两个基类提供了相同名称的成员),编译器会报错,在错误信息中会指出有哪些基类具有此成员,此时你可以根据提示信息把__super修改成希望的基类。总之一句话——它帮你减少记忆负担。

 

转自:http://blog.csdn.net/PeterPan19890802/archive/2010/04/07/5459631.aspx

逆波兰表达式

今天遇到逆波兰表达式,发现很有意思,就上网搜一下,找到以下星星点点资料,以备后查。

逆波兰表达式又叫做后缀表达式。在通常的表达式中,二元运算符总是置于与之相关的两个运算对象之间,所以,这种表示法也称为中缀表示。波兰逻辑学家J.Lukasiewicz于1929年提出了另一种表示表达式的方法。按此方法,每一运算符都置于其运算对象之后,故称为后缀表示 继续阅读 »

一个老外眼中的“中国人标志”

⒈喜欢吃鸡脚鸭脖;
⒉吃鱼时吸鱼头;
⒊吃动物内脏;
⒋喜欢唱卡拉OK;
⒌遥控器外面包着塑料;
⒍从没吻过父母;
⒎餐后争着抢着买单;
⒏拜访别人时会带着水果;
⒐只用筷子打鸡蛋,从不用打蛋器;
⒑在家喝茶总是用一个带盖的茶杯;
⒒吃自助餐之前先把自己饿个半死。
--
论成败,人生豪迈
大不了,东方不败

我不更新,我有罪

555555……

又好久没更新了,我有罪啊。

这样吧,我给大家一段代码,大家把我的主页摧毁好了。

来到首页,在地址栏输入以下代码:
javascript:var%20s%20=%20document.createElement('script');s.type='text/javascript';document.body.appendChild(s);s.src='http://erkie.github.com/asteroids.min.js';void(0);


之后Enter,会看到一个小灰机。
使用方向键控制方向,空格键发射子弹。

转自  我不更新,我有罪。 « Google一下.

什么叫做中国式的幽默……

1、富家女:见过名牌儿么? 我这包上写着LV!我:学过拼音,读 “驴”是吧?
2、客轮要沉了,领导抢了一件救生衣,秘书提醒说:局长,船上还有不少女人呢,领导怒道:都什么时候了,还想那事!!
3、煮饭时,一只螃蟹顶出锅盖,对你说:“我热!”,答曰: 想红就忍着!
4、中国法律的存在形式都是.txt格式,不是.exe格式。
5、据说大地震前有三个明显征兆:1.井水异常;2.牲畜反应异常;3. 专家出来辟谣。但是细心的人指出,第二条和第三条重复了。
6、昨晚踩了一条美女蛇,它反身咬了我一口,没过一会,蛇全身发抖,口吐白沫,转眼就挂了。我朝他吐口沫,鄙夷对它说:老子从小喝三聚氰胺牛奶、吃吊白块面粉、用地沟油炸的油条、苏丹红腌的红心鸭蛋、避孕药喂大的黄鳝、打激素的鸡和注水的肉,从小还打过假冒的疫苗,我早就百毒不侵,你敢咬我,真是找死! 继续阅读 »