Articles of c ++ 11

std :: u32string转换为/从std :: string和std :: u16string

我需要在UTF-8,UTF-16和UTF-32之间针对不同的API /模块进行转换,因为我知道可以select使用C ++ 11来查看新的stringtypes。 它看起来像我可以使用UTF-8,UTF-16和UTF-32的string , u16string和u32string 。 我还发现codecvt_utf8和codecvt_utf16看起来能够做char或char16_t和char32_t之间的转换,看起来像一个更高级别的wstring_convert但似乎只能使用字节/ std::string wstring_convert std::string而不是大量的文档。 我打算为UTF-16 UTF-32和UTF-8 UTF-32情况使用wstring_convert吗? 我只是真的find了UTF-8到UTF-16的例子,我甚至不能确定在wchar_t通常被认为是UTF-32的Linux上是正确的…还是直接用这些codecvt做些更复杂的事情呢? 或者这只是还没有真正处于可用状态,我应该坚持我自己现有的小例程使用8,16和32位无符号整数?

使用mingw和g ++ 4.7.2获取std :: thread / mutex在Win7下工作

问候, 我最近搬出了我的unix避难所来testing一个所谓的跨平台的networking库,只是发现mingw不喜欢被喂食c ++ 11的东西。 我认为我错过了所需的头文件,因为Win7并没有包含c ++ 11的支持。 它与VS2012编译得很好 但g ++拒绝。 error: 'thread' in namespace 'std' does not name a type error: 'mutex' in namespace 'std' does not name a type 问题是: 如何获得c ++ 11头文件/ lib的副本,即<thread>而不使用VS2012安装提供的。 PS#1我试过mingw得到更新,但它仍然不会find<thread> PS#2我也使用-std = c ++ 11 此致 克里斯。

如何使用C ++ / C ++ 11打印当前时间(以毫秒为单位)

目前我使用这个代码 string now() { time_t t = time(0); char buffer[9] = {0}; strftime(buffer, 9, "%H:%M:%S", localtime(&t)); return string(buffer); } 格式化时间。 我需要添加毫秒,所以输出的格式是: 16:56:12.321

MinGW和std :: thread

所以我一直试图通过使用MinGW编译器来获得下面的代码来编译和运行在Windows上。 #include <iostream> #include <thread> void test() { std::cout << "test" << std::endl; } int main() { std::thread t(test); } 我正在编译以下命令: g++ -std=c++11 test.cpp -o test.exe 现在问题是应该使用的MinGW的版本,我已经尝试了所有我知道的版本。 MinGW生成: thread-win32 MinGW生成: thread-posix MinGW-w64: stdthread实验rubenvb MinGW-w64: stdthread实验rubenvb 4.7 Number 1不起作用,因为GCC 显然只在内部支持 pthread的东西。 编号2编译,它本质上甚至输出test (见输出的最后一行),但它也崩溃的错误: terminate called without an active exception This application has requested the Runtime to […]

如何使用__stdcall来限定C ++ lambda?

前言 – 我喜欢C ++的lambda,如果可能的话我会在任何地方使用它。 现在我有一个lambda要求,我需要一个__stdcall lambda。 但是我收到以下错误消息: error C2664: 'EnumWindows' : cannot convert parameter 1 from '`anonymous-namespace'::<lambda1>' to 'WNDENUMPROC' 1> No user-defined-conversion operator available that can perform this conversion, or the operator cannot be called 任何人都可以帮助我? 这里是我的代码( EnumWindowsProc是在函数范围内 ): auto EnumWindowsProc = [&](HWND hwnd, LPARAM lParam) mutable -> bool { return true; }; EnumWindows(EnumWindowsProc, NULL);

MinGW的C ++ 11function

我尝试为unordered_map使用emplace()函数,编译器说没有这样的函数存在。 我把-std=c+11 ,它说cc1plus.exe: error: unrecognized command line option '-std=c+11' 我能以某种方式使用mingw的C ++ 11function吗?

是依靠一个Windows手柄的types是一个指针好吗?

Windows的句柄有时很烦人,记得清理后(使用创build的笔和刷子做GDI就是一个很好的例子)。 RAII解决scheme非常棒,但是为每个不同types的手柄制作一个完整的(规则五)RAII类真的很棒吗? 当然不是! 我能看到的最好的是一个完整的genericsRAII类,其他类只是定义了在清理句柄时要做什么以及其他句柄特定的方面。 例如,一个非常简单的模块类可以这样定义(只是一个例子): struct Module { Module() : handle_{nullptr} {} Module(HMODULE hm) : handle_{hm, [](HMODULE h){FreeLibrary(h);}} {} operator HMODULE() const {return handle_.get();} private: Handle<HMODULE> handle_; }; 这一切都很好,没有破坏者或任何东西是必要的。 当然,虽然能够编写Handle类不需要析构函数,但也是很好的。 为什么不使用现有的RAII技术? 一个想法是使用一个智能指针到一个void ,但这是行不通的。 以下是在正常情况下实际声明句柄的方式: #define DECLARE_HANDLE(n) typedef struct n##__{int i;}*n DECLARE_HANDLE(HACCEL); DECLARE_HANDLE(HBITMAP); DECLARE_HANDLE(HBRUSH); … 它实际上区分句柄types,这是好的,但它使使用一个智能指针不可能void 。 如果相反,由于句柄是定义,指针,types可以被提取? 我的问题是,以下是否是一个安全的假设。 它使用桌面的句柄,必须closures。 除了共享指针和唯一指针之间的区别(例如, FreeLibrary有自己的引用计数语义),假定句柄是一个指针,并指向任何指向好的指针,或者我不应该使用智能指针并使Handle实现RAII方面本身? #include <memory> #include <type_traits> […]

Windows上的C ++ 11线程

在MinGW中使用g ++ 4.5.2进行编译时,有没有办法在windows中使用std::thread和C ++ 11标准库? 我是gunna承认不,因为我已经看到很多事情说你必须编译与pthreads选项,但我想我会问无论如何。

如何将std = c ++ 11标志添加到clang-cl?

我试图用Windows下的clang-cl编译一个C ++ 11程序。 Clang-cl是clang的封装,与cl(Visual Studio编译器)更兼容。 我试图添加-std=c++11和/std=c++11 ,两者都被拒绝。 这并不奇怪,因为CL没有C ++ 11标志。 但是我不能在clang-cl中使用C ++ 11function。 如何在clang-cl中启用C ++ 11支持?

打印所有std :: locale名称(Windows)

我的程序检查德语的大写字母。 #include <iostream> #include <boost/algorithm/string/classification.hpp> #include <boost/locale.hpp> using namespace std; int main() { locale::global(locale("Germany_german")); //locale::global(locale("de_DE.UTF-8")); //Also tried "de_DE.UTF-8", but does not work string str1 = "über"; cout << boolalpha << any_of(str1.begin(), str1.end(), boost::algorithm::is_upper()) << endl; string str2 = "Ää"; cout << boolalpha << any_of(str2.begin(), str2.end(), boost::algorithm::is_upper()) << endl; return 0; } 程序崩溃与控制台上的错误 terminate called after […]