在C ++ API上公开的基本类型

我针对的是Windows,但我没有看到任何理由说明我正在编写的一些API代码不能使用基本的C ++类型。 我想要做的是公开返回字符串和整数的方法。 在C#世界中,我只是使用字符串,并有一个Unicode字符串,但在VC ++中,我可以选择使用std :: string,std :: wstring或MFC / ATL CString。

我应该只使用std :: wstring来支持unicode,还是我可以使用std :: string,它会根据我的编译设置编译为unicode? 我倾向于后者。 我更喜欢在我的对象上为其他字符串类型提供Get [Item] AsCString()方法。

我也应该使用size_t而不是整数?

API将会被我使用,也许是未来的C ++ GUI开发人员。 这是区分顾虑的一种方式。 我的偏好:

  • 直观的其他开发人员。
  • 向前兼容VC ++
  • 与其他C ++编译器兼容
  • 性能(这对我来说不太重要,但需要我的应用程序的其余部分的启动时间)
  • 任何指南,将不胜感激。


    你应该坚持STL字符串类型。 无论如何,MFC CString类是建立在当今时代之上的。

    如前所述,使用wstring不是解决Unicode问题的灵丹妙药,因为有许多Unicode字符仍然需要多个wchar编码。

    使用Utf-8反而有潜在的好处(例如,您不必担心排列顺序)。

    在Windows上,所有现代内核都是基于wchar的,所以如果使用8bit char版本的API,则会产生(最小)性能开销。


    在你的情况下,我需要几个小时/几天来制定一个观点并做出决定。 首先,我非常喜欢C_API到C ++ _ AP​​I,即使是C ++代码也是如此。 然后答案将是char *,或wchar *,或TCHAR *。 现在,试着猜测你是否真的期望需要UNICODE。 我的绝大多数项目(包括那些使用GUI的项目)都不需要UNICODE,简单的C阵列的简单性和熟悉程度往往难以超越。

    总之,试着预测你需要什么,不要试图在未来看得太远(2年是一个好标志),然后拿出最简单的解决方案来满足需求。

    最后:为了更直接地回答你的问题,我会以std :: string作为我的第一选择来评估。 除非我能找到一些有利于其他选择的出价优势,否则我会坚持下去。


    使用std :: wstring / string而不是MFC CString将允许您将代码移植到其他框架(例如Qt for Windows)。

    即使使用std :: string,你也可以用UTF-8编码字符串,所以你的API仍然能够返回UNICODE字符串。 请记住,即使wstring实际上是UTF-16,而不是完整的32位UNICODE(而在某些操作系统上wstring是UTF-32)。

    链接地址: http://www.djcxy.com/p/51199.html

    上一篇: Basic types to expose on a C++ API

    下一篇: arg and property together in bean definition