wstring 在 gcc/c++ v2.96 上不存在
wstring doesn't exist on gcc/c++ v2.96
我有一个Linux应用程序,在实际的Gcc/c ++编译器中编译得很好。
我需要在一个非常旧的编译器(gcc/c++ 版本 2.96(中编译它。问题是 wstring 不存在。
我在所有系统标头中查找 wstring。我在 g++-3\string 中找到了它,但它被注释了。
我试图做一个简单的Hello world应用程序来测试它。
我放了 typedef wstring,但是当我做一个 wstring 对象编译器的 c_str(( 时说它无法将常量字符 * 转换为常量 wchar_t *。为什么 c_str(( 返回字符而不是 wchar?我该如何解决?
这是代码:
#ifdef HAVE_CONFIG_H
#include <config.h>
#endif
#include <iostream.h>
#include <string>
typedef basic_string<wchar_t> wstring;
int main(int argc, char *argv[])
{
char pHW[100];
wstring kk = L"Hello World!";
wcstombs(pHW,kk.c_str(),100); //kk.c_str() returns char * instead wchar_t
cout << "Text:[" << pHW << "]" << endl;
return EXIT_SUCCESS;
}
如果您需要std::wstring
旧的编译器/库,而不是实现C++标准并且不提供它,则需要自己实现足够的版本。根据您的需要,实现版本可能不太复杂,例如,在std::vector<wchar_t>
方面。大多数std::basic_string<...>
函数都可以使用算法非常容易地实现。
也就是说,如果您希望让iostreams为wchar_t
工作,那么几乎所有的希望都失去了!如果我真的必须做这样的事情,我可能会挖掘我的标准库实现并尝试让它在这个 gcc 上编译。如果我没记错的话,它不会包含std::basic_string<...>
的实现,但它将包含wchar_t
流。
我个人认为wchar_t
和与之相关的任何内容(以及char16_t
和char32_t
(都是错误的方向:在std::string
中使用 UTF-8 并为此定义必要的操作。 wchar_t
不能解决任何问题,但确实创造了没有它就不存在的新问题(而且,是的,我知道Microsoft被 Unicode 承诺在任何地方使用它所欺骗 - 对于针对 Windows 的程序员来说(。
一般来说,我的建议就像上面的评论一样;你不应该使用它来过时的编译器和标准库。但似乎你没有任何其他选择。
如果您唯一的问题是c_str()
(即其他方法和运算符工作正常(,您可以检查basic_string
实现,看看它们如何自己实现c_str
。
如果只是简单地返回底层内存的地址,只强制转换为char *
(这意味着一个连续的内存块(,那么您可以将返回的指针直接投射回wchar_t const *
,它可能会正常工作。
如果basic_string
的基础内存块是不连续的,则始终可以通过迭代字符串并复制wchar_t
来自己模拟c_str()
操作。当然,这在性能方面可能是不可接受的,但我相信你可以根据具体情况解决问题。
如果您的问题更普遍,您可以找到编译器和发行版的第三方C++标准库实现,这些实现更符合(例如 STLport 等(。
我假设您不想自己实现std::wstring
,因为它显然始终是一种选择。
你说你被困在那个版本上,因为:
- 您有一个在预硬件上运行的应用程序
- 此硬件仅支持 RH7.3 或更早版本
恕我直言,仍有实验路径:
- 虚拟化 :虚拟机通常向系统提供简单的硬件,我们使用它来支持旧应用程序,因此您可以尝试在更新的 RH 版本上安装旧应用程序 - 限制:应用程序本身不得依赖于虚拟化无法模拟的专用硬件组件
- 在特定用户主页上安装最近的(体面的(GCC 发行版,使用它来构建您的程序。这或多或少是一些窗口开发者对mingw所做的 - 限制:您必须能够将开发与这个新程序与旧程序分开。
- 我们可以访问一个不存在的联盟的成员吗
- C++:对不存在的命名空间使用命名空间指令
- g++ 说函数不存在,即使包含正确的标头
- 显式 std::exception_ptr 转换为 bool 不存在.VS2010 错误?
- C++ 尝试在不存在的构造函数中引用已删除的函数(使用 rapidJson)
- 查找第一个数组中不存在的元素
- 查找不存在的键时,unordered_map返回什么
- 如何优化代码以返回最接近给定整数的数字,但给定列表中不存在?
- set::find 查找不存在的元素
- 有没有办法将字符串添加到 Vector 中,但前提是它尚不存在?->C++
- inet_ntop返回不存在的地址
- CPP 使用不存在的键访问映射
- 为什么QMediaGaplessPlaybackControl不存在?
- 如果键不存在,使用 [] 运算符访问 STL Map 元素会添加新元素
- 标记未定义的颜色,并且颜色匹配系统中不存在样品
- 为什么minhook库目录不存在
- 为什么 std::vector::p ush_front() 不存在?
- 不存在从"Magick::Color"到"MagickCore::Quantum"的合适转换功能
- 为什么 MDI 子窗口在WM_NCCREATE后不存在?
- wstring 在 gcc/c++ v2.96 上不存在