请教大虾们个问题!
//............
MessageDlg("The list has " + IntToStr(pList->Count) + "objects",
mtInformation, TMsgDlgButtons() << mbOk, 0);
//............
如上面的TMsgDlgButtons()<<mbOk中,“<<”的用法始终不太清楚,请各位高手指点一二,不胜感激!
<<
C语言里面叫做输入重定向,或者管道什么的。
其实TMsgDlgButtons是一个类来的。例如,你上面的程序可以写作如下的方式
TMsgDlgButtons TS;
TS<<mbOKk;
MessageDlg("............",mtInformation,TS,0);
其实就是设置了TMsgDlgButtons的显示格式,对应的还有mbCancel等等。
呵呵,我以为楼主已经理解了哪,原来没理解。
要搞清楚这个问题,我们这样来看。首先,在BCB的帮助里查找TMsgDlgButtons,可以看到这么一句: typedef Set<TMsgDlgBtn, mbYes, mbHelp> TMsgDlgButtons; 如果你了解一些泛型的知识的话,就能看到TMsgDlgButtons只不过是集合Set的一个具化版本的别名。(如果你对泛型完全不了解,还希望能看看C++方面的书,比如《C++ Primer》)
然后我们再查看Set,它是一个泛型的集合类,其中重载了<<操作符。因为操作符重载后是可以做任何事情的,因此从操作符本身你并不可能看出它的作用。那么,可能的途径就是看源码或者帮助了。我们还是偷懒点看帮助吧:
operator<<(additional): Adds a specified element to the Set.说得很清楚了,增加一个指定的元素到集合中。
那么,TMsgDlgButtons为何在结尾处加个()呢?别忘了,TMsgDlgButtons是个类,类是不能直接拿来用的,需要为他生成一个变量。但是这里我们实际并不需要一个变量,我们只要临时用一下就可以了,所以我们写TMsgDlgButtons()。这样就生成了一个临时变量,没有名字,但却确实可以用。