草庐IT

pybind11

全部标签

C++11 实验,为什么我不能使用某些功能?

我目前正在概述C++11的新特性,由于目前不明原因,其中一些特性无法编译。我使用gccversion4.6.020100703(experimental)(GCC)所以根据GNUGCCFAQ,我尝试的所有功能都是supported.我尝试使用std=c++0x和std=gnu++0x标志进行编译。非成员begin()&end()例如,我不想在如下代码中使用非成员begin()和end():#include#include#include#includeusingnamespacestd;intmain(){mapalias;alias.insert(pair("ll","ls-al")

c++ - 将 C++11 代码编译为 MATLAB mex 文件的一部分

我有一段用C++11编写的代码,我想将其编译为GNU/Linux的MATLABMEX文件的一部分。问题是Linux上的MATLAB仅支持GCC4.3(及更早版本),不支持编译我的C++11代码所需的GCC4.7。是否可以解决该问题?是否可以通过使用GCC4.7编译一些目标文件并使用GCC4.3将它们链接到MEX文件来解决这个问题?提前致谢! 最佳答案 如果您可以在4.3扩展中编写任何代码并编译它,那么只需编写代码来dlopen一个您在4.7中编写和编译的共享对象。使用4.7.so完成所有c++11工作,并通过C接口(interfac

c++ - 有没有用 C++11 中基于范围的 for 循环替换 BOOST_FOREACH 的经验?

您是否经历过将BOOST_FOREACH替换为基于范围的for循环的过程?机械地(即没有对周围的代码进行深入研究)时是否有任何问题?背景:我确实有大约25万行的源代码,是使用MicrosoftVC++10(VisualStudio2010)编译的。该代码还使用了boost库中的BOOST_FOREACH。我只是在尝试使用auto实现基于范围的for循环的VC++11(VisualStudio2012RC)。到目前为止,我遇到过元素声明在BOOST_FOREACH之外的情况(括号内没有声明):BOOST_FOREACH(element,container){...}...并且元素应该在b

c++ - 确定在 C++11 中实现大数的最有效字长?

通常bignums是通过使用多个单词来实现的,但我想选择尽可能便携的单词大小。这比看起来更棘手--std::uint64_t在许多32位编译器中可用,但std::uint32_t可能是更好的选择32位机器。因此,人们很想使用std::size_t,但对于给定的体系结构,不能保证std::size_t是最有效的算术类型,例如thenewx32LinuxABI。std::size_t将是32位,但std::uint64_t仍然是最佳选择。C++11定义了各种大小的快速/最小类型,但它没有提供任何查询它们相对性能的方法。我意识到可能没有最好的可移植答案,我现在最好的猜测是默认为std::si

c++ - 带有 gmock 的 11 个参数的 mock 方法

我正在使用gmock模拟遗留代码中的依赖项。其中一个类有一个带有11个参数的方法。当我尝试使用MOCK_METHOD11_WITH_CALLTYPE来模拟它时,我发现这个宏不存在。gmock最多只支持10个参数。你对此有何建议?我是否用假体实现这个方法?还是复制并扩展宏?谢谢!PS,我现在不需要在我的测试中模拟这个方法,但将来可能需要这样做。最好的问候, 最佳答案 具有超过10个参数的方法可能是一个麻烦的迹象。我可以建议一个解决方法,这将有助于您的具体情况,但除了模拟之外,这也可能是一个好主意。将几个有意义的参数作为一个组,并将它们

c++ - 在 C++ 11 中将非常量左值引用绑定(bind)到右值是否有效?(已修改)

我知道在c++03中,非常量引用不能绑定(bind)到右值。T&t=getT();无效,在c++11中,我们可以这样做:T&&t=getT();但是上面的代码,应该在c++11中工作吗?我用vs11测试了下面的代码:FoogetFoo(){returnFoo();}voidfz(Foo&f){}intgetInt(){returnint();}voidiz(int&i){}intmain(){{Foo&z=getFoo();//okfz(getFoo());//okint&z2=getInt();//error:initialvalueofreferencetonon-constmus

c++ - 为什么 std::stoi 和 std::array 不能用 g++ c++11 编译?

过去几个月我一直在学习C++和使用终端。我的代码使用g++和C++11编译和运行良好,但在过去的几天里它开始出错,从那以后我在编译时遇到了问题。我唯一可以编译和运行的程序依赖于旧的C++标准。我首先得到的错误与头文件中的#include有关。不知道为什么会这样,但我通过使用boost/array来绕过它。我无法解决的另一个错误是std::stoi。array和stoi都应该在C++11标准库中。我编写了以下简单代码来演示发生了什么:////stoi_test.cpp////Createdbyecg//#include#include//stoishouldbeinhereintmain

C++11 main() 返回时终止线程?

我听说“现代操作系统会在关闭进程时清除进程创建的所有线程”,但是当我返回main()时,我遇到了这些错误:1)ThisapplicationhasrequestedtheRuntimetoterminateitinanunusualway.Pleasecontacttheapplication'ssupportteamformoreinformation.2)terminatecalledwithoutanactiveexception我的实现看起来像这样(例如,我现在写的是对糟糕的实现感到抱歉):voidprocess(intid){while(true){std::this_thr

c++ - utf-8 中 std::string 的子字符串? C++11

我需要获取假定为utf8的std::string中前N个字符的子字符串。我了解到.substr无法正常工作……正如……预期的那样。引用:我的字符串大概是这样的:任务:\n\n1亿2千匹 最佳答案 我found这段代码,我正要尝试一下。std::stringutf8_substr(conststd::string&str,unsignedintstart,unsignedintleng){if(leng==0){return"";}unsignedintc,i,ix,q,min=std::string::npos,max=std::s

c++ - 我可以将 final 关键字应用于 C++11 中的 POD(标准布局)结构吗?我是不是该?

在一个充满对象(具有适当行为)和相对较少的非面向对象结构(仅由数据字段和无方法组成)的C++项目中,我想防止意外误用这些结构,其中可能会尝试创建一个继承自它的类。根据我的理解,因为这些“POD”(普通旧数据)结构没有虚拟析构函数,所以不可能通过指针正确删除派生类对象(如果允许创建它)POD类型。这似乎是C++11“final”关键字的一个很好的用例,它将一个类或结构标记为不可继承。但是,我想知道“final”关键字是否会导致结构变为非POD?我怀疑标准文档可能已经解决了这个问题,但我不够聪明,无法在很长的文档中进行筛选以找出答案。欢迎任何有用的指示。注意:我对仅仅知道它通过了某些编译器