写了几年的程序,这种形式的语法第一次见到,不知道为何要这样写?

时间:2022-01-29 16:15:30

        pNewItem = new TMenuItem(this); 
        pubString = (AnsiString)omcLoadString(g_tHResSw,CM_AP_SW_30); 
        pNewItem->Caption = pubString;//"全不选";//"Add FilePkg"; 
        struct UnSelectedAllClick 
        { 
          void __fastcall OnClick(TObject* sender) 
          { 
            swnewMain->SelectAll(false); 
          } 
        }; 
        static UnSelectedAllClick* unselect = 0; 
        delete unselect; 
        unselect = new UnSelectedAllClick; 
        pNewItem->OnClick = unselect->OnClick; 
        pmnSw->Items->Add(pNewItem); 
    } 

这样写有啥好处?能否改成一种更通俗易懂的形式呢?

14 个解决方案

#1


晕,这种代码停留在80年代

#2


还用STRUCT 标示CLASS的方法,确实是以前的一种语法,但也有一个好处,就是不用构造和析构来的。

#3


有点看不懂了.

#4


就是用结构表示类,因为类是在结构上扩展的。

#5


就是一个类

#6


如果是在swnewMain成员函数内有点多余,否则没什么不妥.

#7


很正常的东西

#8


就是嵌套类,一般的C++教程都有介绍

---------“还用STRUCT 标示CLASS的方法,确实是以前的一种语法,但也有一个好处,就是不用构造和析构来的。”

   上面这个恐怕不是的吧,STRUCT与CLASS在C++里的唯一区别就是STRUCT默认成员为公有,而CLASS默认为私有,STRUCT不是什么以前的语法,该构造还是要构造,该析构就析构,而且CLASS也也可以不写构造函数和析构函数。

#9


这是很久代码习惯

#10


就是为了在不修改才来的类型,不愿意新写一个类的时候临时构造一个类方法完成__closure的语法.这种办法是随处可写,但是不好处在于,代码显得烦多,替代的方法就是构造一个全局的类对象,而该类当中不存放任何数据,仅仅只是声明所有需要用到的方法,从而完成代码的统一管理机制.

#11


struct
{
  AnsiString Text;
  void __fastcall OnClick(TObject* sender)
  {
    ShowMessage(Text);
  }
} showmessage;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        TMenuItem * pNewItem = new TMenuItem(this);
        pNewItem->Caption = "showmessage";
        showmessage.Text = "hello";
        pNewItem->OnClick = showmessage.OnClick;
        MainMenu1->Items->Add(pNewItem);
}

也许是因为:手工添加事件代码比较方便吧。

#12


楼上这样写看起来爽多了。。。

#13


1。临时用而已,所以不必放在全局声明。
2。为了声明和定义放在一起看明白方便而已。
3。用结构不用类没什么区别。

#14


這種只在某函數內使用的類或結構,使用內嵌方式,很好啊。意思很明確,這個struct就是在這個函數內臨時用一下子的。 看代碼時也不用找來找去。
只是如果代碼太多,才會被分離出來。

要通俗易懂些,簡單的方法是在嵌套類的前後加空行或注釋行。

#1


晕,这种代码停留在80年代

#2


还用STRUCT 标示CLASS的方法,确实是以前的一种语法,但也有一个好处,就是不用构造和析构来的。

#3


有点看不懂了.

#4


就是用结构表示类,因为类是在结构上扩展的。

#5


就是一个类

#6


如果是在swnewMain成员函数内有点多余,否则没什么不妥.

#7


很正常的东西

#8


就是嵌套类,一般的C++教程都有介绍

---------“还用STRUCT 标示CLASS的方法,确实是以前的一种语法,但也有一个好处,就是不用构造和析构来的。”

   上面这个恐怕不是的吧,STRUCT与CLASS在C++里的唯一区别就是STRUCT默认成员为公有,而CLASS默认为私有,STRUCT不是什么以前的语法,该构造还是要构造,该析构就析构,而且CLASS也也可以不写构造函数和析构函数。

#9


这是很久代码习惯

#10


就是为了在不修改才来的类型,不愿意新写一个类的时候临时构造一个类方法完成__closure的语法.这种办法是随处可写,但是不好处在于,代码显得烦多,替代的方法就是构造一个全局的类对象,而该类当中不存放任何数据,仅仅只是声明所有需要用到的方法,从而完成代码的统一管理机制.

#11


struct
{
  AnsiString Text;
  void __fastcall OnClick(TObject* sender)
  {
    ShowMessage(Text);
  }
} showmessage;

void __fastcall TForm1::FormCreate(TObject *Sender)
{
        TMenuItem * pNewItem = new TMenuItem(this);
        pNewItem->Caption = "showmessage";
        showmessage.Text = "hello";
        pNewItem->OnClick = showmessage.OnClick;
        MainMenu1->Items->Add(pNewItem);
}

也许是因为:手工添加事件代码比较方便吧。

#12


楼上这样写看起来爽多了。。。

#13


1。临时用而已,所以不必放在全局声明。
2。为了声明和定义放在一起看明白方便而已。
3。用结构不用类没什么区别。

#14


這種只在某函數內使用的類或結構,使用內嵌方式,很好啊。意思很明確,這個struct就是在這個函數內臨時用一下子的。 看代碼時也不用找來找去。
只是如果代碼太多,才會被分離出來。

要通俗易懂些,簡單的方法是在嵌套類的前後加空行或注釋行。