2011-03-25 77 views
0

我只是想将我的存档中保存的一些旧的C++源代码移植到iOS中,从而提供一个ObjC GUI,使用一些C++东西的包装并保留重要数据在C++代码中工作的东西。所以,问题是,旧的来源来自Win32 MFC,因此使用CString类的字符串,我想用Joe O'Leary的CStdString替换它,这是一个C++模板类,它会做得很好......但:在多个源代码中将ObjC和C++与C++模板类混合使用

我必须使用字符串类定义以及大量不同的C++源代码,因此它们每个都将包含CStdString模板。通常我会为整个字符串类编写一个包装器,但如果我不需要,则会更好。

我会在实例化不同来源的字符串时遇到问题吗?能否将一个模板化的字符串从一个源传递到另一个源?事实上,我不知道编译器是否只为模板生成一次或多次模板的代码,而事实上该模板使用了相同的实例化类型。

你可以填补这一点?

谢谢...

回答

0

我同意CString,只要你留在std :: string或C++的其他多平台字符串实现你不会面临任何问题(甚至在iOS上提升工作)。

我已经将C++/Obj-C集成了大约两年,所以您可以确定保持模型类在C++中(即使是大量模板化代码)也不是问题。我会建议你做Obj-C在Obj-C做的最好的事情,尽管......(避免成为锤子开发者:))

祝你好运!

+0

你好Mr.Gando,这听起来真不错:-)因此,这意味着的std ::这是基类CStdString的确可以在同一个项目,因为这是建立只有一次在代码中包含不同来源的字符串? - 您的最后忠告:好的,在此期间,我很熟悉的对象 - 但不应该意味着我愿意重写工作的C++代码;-) – konran 2011-03-25 21:23:27

+0

我同意的数量较大,便携性也是很好的论据。您可以尝试在您的xcode项目中删除CString,看看会发生什么。如果它依赖于Windows的东西,事情可能会出错。让我知道事情的后续。 – Goles 2011-03-25 23:04:19

+0

好吧,我把你的多,申请模板注释掉点包括为YES ;-) 我的测试是不符合一大堆CPP来源,这将需要更多的时间。到现在我可以说,我可以在typedef定义CString的下降没有编译器错误,无泄漏(分析仪和仪器),我得到不错的结果是这样 回复:) - :.thgir OT薄膜电致发光MORF gnirts lamron一个SI SIHT – konran 2011-03-25 23:51:55

1

MFC和CString只可以适当的Windows操作系统,所以他们没有在任何类型的库,这将潜在地使用非Windows平台被推杆很好的候选人的工作。

我不熟悉的乔·奥利里的CStdString类,但我会建议使用std::string尽可能和char*"extern C"出口和包装功能使用C++以外的土地为C风格的字符串更容易与可能需要调用到C++库中的其他语言兼容。

就模板而言,所有的变化都在编译时生成,然后在运行时选择正确的实现,据我所知。然而,你的问题很可能是从一种字符串翻译到另一种字符串,这可能需要你创建一些中间层或包装从字符串类型的一种语言编组到另一种语言。

+0

那么,乔的CStdString实际上是从std :: string派生的类。我已经使用过很多次了,今天我用了它的最新版本(它的日期是2005年,最后一次是我用了4年),并通过opaque指针测试了一个Obj-C封装类。一切顺利。所以字符串传输Obj-C <=> C++不是一个问题。使用这个类的主要方面是,我可以在CStdString上对CString进行typedef,并将其提供给大多数现有代码,因为在其他类中,我必须替换它,这是其中唯一使用的重要MFC类型。 – konran 2011-03-25 21:33:47

+0

从STL字符串派生即''public std :: string'是一个坏主意,因为'std :: basic_string'析构函数不是'virtual'。如果在他的实现中添加了任何成员,他的派生对象将不会被正确销毁。 'std :: string'不是意图也不是恰当地实现为继承的基类。 – AJG85 2011-03-25 22:15:13

+0

谢谢,好点!无论如何,坏事 - 好东西:CStdString没有自己的成员。对于std :: basic_string的一个/两个字节的实例化来说,它是一个简单的包装器,具有MFC CString提供的大多数功能的便利性和广泛的可用性。我在十多年前在Linux上使用它,在Win32上我无法使用MFC。 Joe的工作从1998年开始,在约7年内发展到约50人的帮助下。我认为他们已经处理了模板中的不良副作用。 – konran 2011-03-25 23:42:12