在wxWidgets中使用STL有什么要注意的吗?

这是wxWidgets论坛的中文版本。在这里,您可以用您的母语汉语讨论上面任一子论坛所涉及的所有关于wxWidgets的话题。欢迎大家参与到对有价值的帖子的中英互译工作中来!
Post Reply
gpml119
In need of some credit
In need of some credit
Posts: 3
Joined: Thu Apr 03, 2008 5:29 pm

在wxWidgets中使用STL有什么要注意的吗?

Post by gpml119 » Thu Apr 03, 2008 5:36 pm

在程序中直接使用STL可以吗?

syskernel
Earned a small fee
Earned a small fee
Posts: 10
Joined: Fri Mar 21, 2008 8:55 pm

Post by syskernel » Fri Apr 04, 2008 12:54 am

有一些需要注意的地方。

比如如果你是unicode编译程序,就需要使用基于wchar_t的stl类,比如
std::wstring等。

单纯的字符串""好多编译器不认,不过加上wxT("")就可以。如果基于unicode编译,也可以用L""。

gpml119
In need of some credit
In need of some credit
Posts: 3
Joined: Thu Apr 03, 2008 5:29 pm

还有个关于STL的问题?

Post by gpml119 » Fri Apr 04, 2008 3:01 am

在《wxWidgets跨平台GUI编程》中,第13章有一段内容:“为什么没有使用STL?

首先,我们来回答一个关于wxWidgets的数据结构类问的最多的一个问题:"为什么它们不采用基于STL(标准模板库)的实现?".最主要的原因是历史原因:wxWidgets从1992年就存在了,这比可以稳定而可靠的支持跨平台交叉编译的STL库要早很久.不过随着wxWidgets的发展,它的许多数据结构类已经拥有了一个和标准STL非常相似的API,希望有一天,wxWidgets中的某些数据结构类可以实现完全的STL兼容.

尽管这样,你还是可以在你的wxWidgets应用程序中使用STL,这需要你将setup.h中的wxUSE_STL置为1(或者在配置wxWidgets的时候使用enable-stl选项),以便使得wxString和别的容器类使用等价的STL实现.不过需要事先声明,在 wxWidgets中允许STL将加大wxWidgets库的大小,并且将延长wxWidgets的编译时间,尤其在使用GCC的时候更加明显.


这是什么意思? 是指在wxWidgets内部没有使用STL,还是说库的使用者不使用STL?

Utensil
Moderator
Moderator
Posts: 423
Joined: Sun Feb 03, 2008 11:38 am
Location: China

Post by Utensil » Fri Apr 11, 2008 5:10 am

答楼上:

wxWidgets在内部不使用STL。除了文中提到的原因,wxWidgets需要在各个落后的编译器上也能通过编译也是一个重要原因。wxWidgets开发者都尽可能不使用STL和模板,这是基于跨平台的考虑。

wxWidgets经常做好两手准备,通过宏作开关,有时只是调用系统中的库,有时却使用自己的实现。

如果设置了wxUSE_STL为1,在wxWidgets内部有些数据结构会被typedef成STL中相应的数据结构,而不使用wxWidgets自己的实现。

-Utensil
In fascination of creating worlds by words, and in pursuit of words behind the world.

On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/

kevin_fly
Experienced Solver
Experienced Solver
Posts: 50
Joined: Tue Apr 15, 2008 12:55 am
Contact:

Post by kevin_fly » Tue Apr 15, 2008 3:19 am

如果不能很好的支持STL,那将是wxWidgets的一大缺陷

Utensil
Moderator
Moderator
Posts: 423
Joined: Sun Feb 03, 2008 11:38 am
Location: China

Post by Utensil » Tue Apr 15, 2008 3:03 pm

kevin_fly wrote:如果不能很好的支持STL,那将是wxWidgets的一大缺陷
支持的。你可以在wxWidgets程序中自由地使用STL,也可以通过设置wxUSE_STL为1来使wxWidgets自身的一部份改由STL实现。

-Utensil
In fascination of creating worlds by words, and in pursuit of words behind the world.

On Github: http://utensil.github.com
Technical Blog in Chinese: http://utensil.iteye.com/

Justin2008
Earned a small fee
Earned a small fee
Posts: 14
Joined: Thu Mar 06, 2008 2:10 am

Post by Justin2008 » Mon May 12, 2008 10:06 am

syskernel wrote:有一些需要注意的地方。

比如如果你是unicode编译程序,就需要使用基于wchar_t的stl类,比如
std::wstring等。

单纯的字符串""好多编译器不认,不过加上wxT("")就可以。如果基于unicode编译,也可以用L""。
确实如此,尤其是使用VS2005进行开发(默认使用unicode),特别要注意std::string 和 wxString之间的转换。
蛇幡

yamei2000
In need of some credit
In need of some credit
Posts: 9
Joined: Thu May 22, 2008 12:04 pm

Post by yamei2000 » Thu May 22, 2008 12:14 pm

学习
from china!!

Post Reply