草庐IT

std-function

全部标签

c++ - 严格的别名规则和 std::copy

我有一个字符数组,其中包含我需要解释为“int”的“序列化”数据。以前我只是将指向位置的指针转换到“int*”并取消引用以获取int数据,但尽管它对我来说效果很好,但它打破了严格的别名规则,因此出现了未定义的行为。所以现在我使用memcpy将字节复制到一个int中,我相信这不是未定义的行为。但是我可以使用“std::copy”吗?例如chardata[10]={0,1,2,3,4,5,6,7,8,9};inti;std::copy(data,data+sizeof(int),reinterpret_cast(&i));这本身并没有违反严格的别名规则,但任何可能的实现都会这样做.....

C++ const 与 std::pair 的正确性

我正在维护一个容器类,其接口(interface)类似于std::map/std::unordered_map.接口(interface)声明存储std::pair(即value_type是什么)。然而,在内部,该实现存储了一个排序的std::pair数组。.当前的实现使用reinterpret_cast实现迭代器。我的问题是,是否有更好的选择?开始存储std::pair的数组不可能,因为实现需要复制数组中的元素来实现插入和删除。它执行此操作的方法之一是使用std::sort.编辑虽然我相信reinterpret_cast调用未定义的行为(或定义的实现?)我还没有遇到过这样不起作用的编

c++ - Matlab Engine 命令窗口中的 "??? Undefined function or method"

我正在使用VisualStudio编写C++代码,并将一些变量发送到MATLAB引擎。到目前为止没有问题。假设我打开了MATLAB命令窗口并且这些变量:»whosNameSizeBytesClassAttributesQWe1x3652920doubleQWp1x3642912doubleQWu1x3642912double我可以使用标准的MATLAB函数,但我下载了一个新的function.m(设置路径后它在MATLAB中正常工作),MATLAB引擎的命令窗口无法识别或找到它。»isnormq(Q)???Undefinedfunctionormethod'isnormq'我以为它们(

c++ - 交换 std::vector 作为函数参数

我想交换一个std::vector作为函数参数,这样就不必复制vector。像这样:function(std::vector().swap(my_vector));或者在我的例子中是这样的:std::make_pair(0,std::vector().swap(my_vector));当然std::vector::swap返回void,而不是创建的vector。有办法吗? 最佳答案 使用任何现代编译器,然后您可以使用std::move,它获取您的vector并将其作为右值返回:function(std::move(my_vector

c++ - 使用 GetProcAddress : callback function fails with invalid parameter 从 C++ 调用 Delphi DLL

我有一个从C++调用的第3方DelphiDLL。不幸的是,我无法访问PascalDLL代码,也不是Pascal程序员。没有lib文件,所以我使用GetProcAddress调用许多DLL函数,成功地通过值、地址和引用传递参数。我还注册了一个回调函数,它会在预期时被调用。我的问题是在回调函数中,无法评估两个参数之一(地址0x000001)。这是PascalDLL函数声明typeHANDLE=Pointer;///handle(**ThisfunctionRegistersthecallbackfunctionOnACLNeeded*)functionRegisterCallback(h:

C++11 std::regex_match 返回额外字符

这个问题在这里已经有了答案:关闭10年前。PossibleDuplicate:Isgcc4.7buggyaboutregularexpressions?我遵循了http://www.cplusplus.com/reference/std/regex/regex_match/上的示例并在Ubuntu12.0464位上使用g++版本4.6.3编译以下是我的输出:stringliteralmatchedstringobjectmatchedrangematchedstringliteralwith3matchesstringobjectwith3matchesrangewith3matche

c++ - std::initializer_list<> 和一个引用参数

我刚开始使用初始化列表,我想知道它们的工作方式是否与其他STL容器相似。我的意思是他们复制值(value)观吗?我想做的是一个简单的min()函数,如下所示:templateT&minArgs(conststd::initializer_list&Arguments){constT*Smallest=Arguments.begin();for(constT*I=begin(Arguments);I!=end(Arguments);++I){if(*I然而,当我调用函数时,我从GCC得到了这个:error:'const'qualifierscannotbeappliedto'int&'我

c++ - 可以使用 memset 来填充一组 std::complex<float> 吗?

具体来说,我想知道这一行是否:memset(cjzyp,(0,0),size_cjzy*sizeof(std::complex));将填写cjzyp,complex的数组s,具有复数零值((0,0))。 最佳答案 std::memset将转换为unsignedchar的int作为第二个参数,它不会工作。使用std::fill代替http://www.cplusplus.com/reference/algorithm/fill/cjzyp=newstd::complex[100]std::fill(cjzyp,cjzyp+100,st

c++ - 如何访问一片 packed_bits<> 作为 std::bitset<>?

我正在尝试实现packed_bits使用可变参数模板和std::bitset的类.特别是,我在编写get时遇到了问题返回对成员m_bits子集的引用的函数其中包含所有打包位。该功能应类似于std::get对于std::tuple.它应该作为一个引用叠加层,这样我就可以操作packed_bits的一个子集。.例如,usingmy_bits=packed_bits;my_bitsb;std::bitset&s0=get(b);std::bitset&s1=get(b);std::bitset&s2=get(b);更新下面是根据Yakk'srecommendationsbelow重写的代码.

c++ - 提供方法指针和派生类型对象时 std::bind 的一致性

这个问题基本上是this的后果我给的答案。我刚刚意识到标准中的措辞似乎省略了一些情况。考虑这段代码:#include#includestructfoo{voidf(intv){std::cout该标准在20.8.9.1.2中描述了std::bind的效果以及调用它时发生的情况。转发到20.8.2,相关部分是:20.8.2Requirements[func.require]1DefineINVOKE(f,t1,t2,...,tN)asfollows:—(t1.*f)(t2,...,tN)whenfisapointertoamemberfunctionofaclassTandt1isano