Articles of c ++ 11

Visual C ++ – 重写从DLL导入的函数?

我想覆盖kernel32.dll中的特定function。 是否有可能在静态库中重新定义该函数,并强制执行该静态库中的可执行文件? 我想不同的联系可能会成为一个问题。 这将是可以用我自己的自定义DLL覆盖它。 然而,问题是DLL本身需要链接到kernel32.dll,所以它忽略了我对该函数的定义。 编辑:我得到它与我自己的DLL工作。 在构build时,链接时间码生成需要被禁用。 那么静态链接重写的函数呢?

为什么utf-8字符不显示在cmd.exe中?

我在Windows下testingc + + 11string文字与tdm-gcc: #include <iostream> int main(int argc, char** argv) { std::cout << u8"你确定要这么做吗" << std::endl; return 0; } 命令行: e:\src\c++\11>g++ utf8_literal.cc -std=c++11 使用chcp 65001将代码更改为utf8,然后运行该应用程序,结果如此 你的第一个汉字是不正确的。 但是,如果添加一个英文字符,例如a那么显示是正确的: 因此我们可以排除字体问题。 为什么第一个字符拒绝显示前面没有英文字符?

在编译affdex linux示例应用程序时未定义对进程(std :: __ cxx11 :: basic_string …)的引用

我尝试编译affdex sdk示例应用程序时遇到以下错误 Linking CXX executable video-demo CMakeFiles/video-demo.dir/video-demo.cpp.o: In function 'main': video-demo.cpp:(.text+0x11cb): undefined reference to affdex::VideoDetector::process(std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > const&) collect2: error: ld returned 1 exit status 我正在使用GCC 5.2.1

通过套接字发送NULL数据

我目前正试图通过基于TCP / IP的套接字与外部应用程序通信。 我已经成功build立了与客户端的连接,并收到一些数据。 这个手册在这里指出 在收到这个命令后,客户端必须从守护进程读取一个确认字节。 肯定确认是一个零位的八位位组。 否定确认是任何其他模式的八位字节。 我想发送一个积极的承认,我发送这种方式我的服务器侦听代码是从这里获得 void WriteData(std::string content) { send(newsockfd,content.c_str(),content.length(),0); } WriteData("00000000"); 我的问题是,如果我正确地发送这个数据(八位字节的零位)? 更新: 我已经阅读这篇文章,其中指出,发送只允许发送一个char *数组。 所以我不知道我怎么可以通过套接字发送一个字节。 我知道我可以做这样的事情 std::bitset<8> b1 ; // [0,0,0,0,0,0,0,0] 但我不知道如何通过套接字发送。

在您为INTEL C ++编译器(Linux)configuration的searchpath中找不到文件可执行文件

我想使用code :: blocks来debugging我的c ++代码。 我打开一个新项目并粘贴我的代码。 但是有上面的错误。 说实话,我不知道我的编译器是什么! 当我想运行我的代码时,我写道: g++ -std=gnu++11 mycodename.cpp 在terminal。 如何在Linux中删除以上错误? 一步一步的答案是高度赞赏。 我将编译器从setting…compiler更改为gnu gcc,但错误是关于英特尔编译器!

使用unique_ptr来控制文件描述符

理论上,我应该能够使用自定义的指针types和删除器,以使unique_ptrpipe理不是指针的对象。 我试了下面的代码: #ifndef UNIQUE_FD_H #define UNIQUE_FD_H #include <memory> #include <unistd.h> struct unique_fd_deleter { typedef int pointer; // Internal type is a pointer void operator()( int fd ) { close(fd); } }; typedef std::unique_ptr<int, unique_fd_deleter> unique_fd; #endif // UNIQUE_FD_H 这是行不通的(gcc 4.7和-std = c ++ 11参数)。 它回应以下错误: In file included from /usr/include/c++/4.7/memory:86:0, from test.cc:6: /usr/include/c++/4.7/bits/unique_ptr.h: In instantiation […]

如何在centos6上分发c ++ 11共享库

我有一个C ++ 11库( https://github.com/matiu2/cdnalizer )。 我想分发到centos6和ubuntu12.04 LTS。 它在Ubuntu 13.10和Gentoo上愉快地编译。 我尝试尽可能多的静态编译,但它仍然取决于centos没有的glibc: matiu@matiu-laptop:~/projects/cdnalizer/build/src/apache$ readelf -d mod_cdnalizer.so | grep NEED 0x0000000000000001 (NEEDED) Shared library: [libapr-1.so.0] 0x0000000000000001 (NEEDED) Shared library: [libstdc++.so.6] 0x0000000000000001 (NEEDED) Shared library: [libgcc_s.so.1] 0x0000000000000001 (NEEDED) Shared library: [libc.so.6] 0x000000006ffffffe (VERNEED) 0xd520 0x000000006fffffff (VERNEEDNUM) 3 build造线: /usr/bin/g++ -fPIC -I/usr/local/include -I/usr/include -I/usr/include/x86_64-linux-gnu -I/usr/include/x86_64-linux-gnu/c++/4.8 -Wall -Wextra -g -shared -Wl,-soname,mod_cdnalizer.so […]

如何编写写入/ var / log / myapp目录的C / C ++应用程序?

背景 在Linux系统上, 应用程序日志存在于/var/log子目录中,该root/root由root/root拥有,在我的系统上拥有755个权限。 例如,我看到/var/log/mysql和/var/log/samba 。 题 如果我想让一个myapp能够写入/var/log/myapp ,在C / C ++中完成此操作的规范方式是什么? 思考 如果我不想sudo a_setup_script.sh我必须像setuid root那样做一些疯狂的sudo a_setup_script.sh吗? 请注意,我知道syslog例程,但它们不足以满足我的需要(我需要logging更多的信息,分成不同的文件,因此需要子目录)。 我是否需要查看一下Ubuntu打包(设置目录)和将文件IO直接导入子目录(通过myapp )? 我想尽可能遵循标准。 附录 我忘了提及, myapp实际上是一个守护进程(一个监听客户端的服务器),所以如果有一个myapp_user实际运行/启动进程,那么这个进程并不是那么糟糕。 回答 对于Ubuntu,最好的解决scheme似乎是rsyslog ,这是一个function强大,现代化的syslog替代品。 它将根据需要生成文件/目录,它具有用于灵活路由syslog条目的内置语言,并且在C / C ++级别使用简单的旧syslog API。 要存储路由信息,您可以在C / C ++中定义自己的文本消息编码,并配合正确的rsyslog.conf来处理解码。

C ++ 11:g ++ – 4.7内部编译错误

以下代码: #include <iostream> #include <array> using namespace std; constexpr int N = 1000000; constexpr int f(int x) { return x*2; } typedef array<int, N> A; template<int… i> struct F { static constexpr A f() { return A{{ ::f(i)… }}; } }; template<class A, class B> struct C {}; template<int… i, int… j> struct C<F<i…>, F<j…>> […]

为什么使用std :: thread :: hardware_concurrency()和boost :: thread :: hardware_concurrency()有区别?

问题本身的描述非常简单。 我正在testing在C + + 11和boost ::线程库的std ::线程库的差异。 这些输出: #include <iostream> #include <thread> #include <boost/thread.hpp> int main() { std::cout << std::thread::hardware_concurrency() << std::endl; std::cout << boost::thread::hardware_concurrency() << std::endl; return 0; } 给了我不同的结果: 0 4 这是为什么? PS:gcc软件包的版本是4.6.2-1.fc16(x86_64)。 我在用着 g++ test.cc -Wall -std=c++0x -lboost_thread-mt -lpthread