2008-01-29

关于 C++ 中的函数指针

Views: 14049 | Add Comments

(只是个人的感情喜好, 可能不适合某些人, 特别是对 C++ 比较有感情的人.) 我终于知道 Linus 为什么会骂 C++ 是狗屎了, 因为它把简单的东西变得复杂了(当然, 它也把某些复杂的东西变简单了).

#include

class A{
public:
    void fun();
};

void A::fun(){
    printf("fun\n");
}

int main(int argc, char *argv[]){
    A a;
    void (A::*p)() = &A::fun;
    (a.*p)();
    return 0;
}

这是什么狗屎? 如果这样的话, 函数指针还有实用意义吗? -- 为了调用类中的一个方法, 你竟然需要知道该方法的名称, 所处的类的名称, 以及它的实例的名称, 而且调用的时候还要加上实例的名称(4 个条件)! 这就是真正的狗屎!

我希望是下面的形式(只需要两个条件: 类实例的名称, 方法的名称):

void (*p)() = a.fun;
p();

是的, C# 做到了, 所以 C# 被人称为语法优美的语言.

Related posts:

  1. C++成员函数作为pthread_create参数
  2. 使用 jemalloc 编译过程出错的问题
  3. C++ const& 的坑
  4. 蛇形遍历数组
  5. 小心 int 乘法溢出!
Posted by ideawu at 2008-01-29 17:25:00

Leave a Comment