今天真的感到C++落后了!

robinswan 2004-01-06 11:45:41
本来想在Native C++中建立一个类似于C#的委托机制类如下:
class NonTypeDelegate
{
public:
typedef void(*pfunc)(CObject* sender, EventArgs& e);

public:
NonTypeDelegate(pfunc pf):pf(pf){};
~NonTypeDelegate(){};

protected:
pfunc pf;

public:
void operator()(CObject* sender, EventArgs& e){
pf(sender, e);};
};

当这个类用于全局函数时没有问题,于是想将用于类中的函数。类如下:
template<typename T>
class TypeDelegate
{
public:
typedef void (T::*pfunc)(CObject* sender , EventArgs& e);
pfunc pf;

public:
TypeDelegate(pfunc pf) : pf(pf){}
void operator ()(CObject* sender, EventArgs& e){ pf(sender, e);}
};
其中EventArgs时自己定义的事件参数类,无关大局的。上面这个类编译没有问题,但是真的用就有问题了,如:

TypeDelegate<MyClass> dg(MyClass::function);

这时将出现各种离奇编译或者连接错误,翻遍各种资料原来时C++的局限性,
不能传递类模板的参数!!!!!!!

今天真的感到C++像古董了!这也是为什么Java,C#能崛起的原因!
...全文
59 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
robinswan 2004-01-08
  • 打赏
  • 举报
回复
并且我希望各位多点向老蒋学习,多做实事少漫骂.
向老蒋致敬!我的MSN messager account 是

swanrobin@msn.com

如蒙不弃!请联系。
robinswan 2004-01-08
  • 打赏
  • 举报
回复
嗯!一时没有主要到指针寻址的问题,非常感谢各位!得罪各位C++ER了,呵呵!买单!
lu_zi 2004-01-06
  • 打赏
  • 举报
回复
我相信c++
vcforever 2004-01-06
  • 打赏
  • 举报
回复
把时髦的技术挂在嘴边,还不如把过时的技术记在心里
况且c++并不过时
:)
Ah 2004-01-06
  • 打赏
  • 举报
回复
是你的代码没写好吧,不是C++不行了
jyc_nj 2004-01-06
  • 打赏
  • 举报
回复
解释一下为什么"当这个类用于全局函数时没有问题".
class NonTypeDelegate
{
public:
typedef void(*pfunc)(CObject* sender, EventArgs& e);
//这可不是什么类的成员函数,压根是个一般的函数嘛.

}

jyc_nj 2004-01-06
  • 打赏
  • 举报
回复
你这样作有问题吧??
类的成员函数指针只是个offset值, 没有类实例的指针怎么可以调用呢?
改改你的模板类TypeDelegate吧(哦,它是个类么?名字真Typical)
template<typename T>
class TypeDelegate
{
public:
typedef void (T::*pfunc)(CObjectTmp* sender , EventArgs& e);
pfunc pf;
T * m_pThis;//皮之不存,毛往哪附??
public:
TypeDelegate(T * pThis, pfunc pf) : m_pThis(pThis), pf(pf){}
void operator ()(CObjectTmp* sender, EventArgs& e)
{
std::cout << "TypeDelegate::operator()" << std::endl;
(m_pThis->*pf)(sender, e);
}
};
用的实现,可别忘有个实例化的对象.
flyelf 2004-01-06
  • 打赏
  • 举报
回复
不同的目的,需要走不同的路,编程也一样
robinswan 2004-01-06
  • 打赏
  • 举报
回复
问题是达到目的路,如果这条路比别人的路又难又长呢。
我是做嵌入式系统的,控制我宁愿用汇编!
如果仅仅的逻辑和界面的东西,为什么C++做得比别人麻烦呢?!
xf2002xf 2004-01-06
  • 打赏
  • 举报
回复
其实,编程不过是手段,只要能达到目的,用什么语言有什么关系了?
如果你是玩高级功能的话,用Java,C#不错,如果你要实现高效的底层控制功能的话,还是的从C、C++开始
yunhi 2004-01-06
  • 打赏
  • 举报
回复
up一下 :)
fohoo 2004-01-06
  • 打赏
  • 举报
回复
问问题倒也罢了

偏要用这个标题,楼主一定是胖了点,想过过称,呵呵

tan_jianhui 2004-01-06
  • 打赏
  • 举报
回复
支持c,c++和java。
lansefeng 2004-01-06
  • 打赏
  • 举报
回复
不要骂人嘛
alvachien 2004-01-06
  • 打赏
  • 举报
回复
呵呵,那么楼主就去学C#或者Java好了啊。

何必在这里贬低C++?
slyfox 2004-01-06
  • 打赏
  • 举报
回复
C++ 是永不过时的,
你个猪头, 自己没对怪别个。

C++是没有缺陷的,局限只是为了折衷
你个猪头,自己不会用就不用萨






ross33123 2004-01-06
  • 打赏
  • 举报
回复
支持 vcforever MM

:)

16,551

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Creator Browser
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧