草庐IT

c++ - 如何轻松知道编译器选择了哪些特殊成员函数?

覆盖每个特殊成员函数的朴素方法,并在每个函数的主体中插入printf或cout(例如C++:ImplicitMemberFunctions此处为SO;VandevoordeandJosuttis称之为“示踪剂”),不上诉:侵入性的,在代码库增量方面O(n),其中n=|classes|,根据努力可能的观察者效应将-E(或-save-temps)赋给g++会导致后者为每个源发出一个.ii文件>.cpp(或.cxx)文件;在这样的.ii中,源代码将用cpp预处理器采取的确切步骤进行注释。理想情况下,我想要类似的东西,但源被注释为Foobaz;////Line55,choosingFoo::F

c++ - 类 C 结构中自动字段重新排序的方法

有没有办法执行automaticfieldsreordering在类似C的结构中?我的意思是使用语言特性(C和C++的预处理器以及C++的模板/类型特征/等),这使得执行以下宏成为可能(类似Boost.Fusion的样式以适应结构):REARRANGE(StructureName,(int8_t)(FieldName1),(int32_t)(FieldName2),(int16_t)(FieldName3),(int32_t)(FieldName4));//isequivalentto(withoutlossofgenerality):structStructureName{int32

c++ - 使用精神以替代方式解析结构时混淆输出

这是我尝试以尽可能最好的方式做的事情的一个大大减少的案例。(当然,问题还在于,我试图了解如何最好地使用精神。)我需要将数据解析为具有多个成员的结构。成员被简单地列为键值对,因此这很简单——但是,如果某些键不同,那么在我正在解析的数据中,不同的值可能会稍后出现,或者某些键可能会被省略。尽管如此,我最终解析的数据结构是有固定形式的。在示例代码中,my_struct是struct像这样:structmy_struct{std::stringa;std::stringb;std::stringc;std::stringd;};和grammar1是一个像这样解析字符串的语法"a:xb:yc:zd

c# - 在 C++/C# 之间的结构内传递字符串/数组

我正在将结构从C#传递到C++。C#代码:[StructLayout(LayoutKind.Sequential,Pack=8)]publicstructData{[MarshalAs(UnmanagedType.U4)]publicintnumber;[MarshalAs(UnmanagedType.ByValArray,SizeConst=5)]publicint[]array;[MarshalAs(UnmanagedType.ByValTStr,SizeConst=512)]publicstringbuffer;}C++代码:structData{public:intnumber

c++ - 将结构传递给 dll

我想将几个数据传递给Dll函数,所以我正在考虑创建一个结构并通过如下结构将它们传递给Dll函数:structoptions{intop1,intop2,intop3,char*op4,...char*op10}voiddllFunction(optionsmyOptions)无论开发工具是什么,dll都应该以在Windows平台上工作的方式实现,我想知道:这样发送数据有效吗?请注意,结构成员都是基本的c类型(int、float、double、...)。为什么我担心它?如您所知,不同的编译器以不同的方式实现std类,因此您不能通过dll边界传递std类,但我不确定是否所有编译器都以相同的

c++ - MPI 在 C++ 中发送具有 vector 属性的结构

我想发送一个具有vector属性的结构。typedefstruct{intid;vectorneighbors;}Node;我知道我必须创建一个MPI派生数据类型,如thisanswer,但我不知道在我的情况下该怎么做,因为我在结构中有一个vector。 最佳答案 如果你想保持高水平并发送对象,那么Boost.MPI是个不错的选择。使用Boost.MPI,您可以为结构指定高级序列化。您不能(正确地)静态确定vector数据成员的偏移量。拼凑出一个有效的类型当然是可能的。但这也是搬起石头砸自己脚的好方法。您会在代码中引入假设(例如,v

c++ - 如何在 LLVM 中获取结构成员的值?

所以我用这个创建了一个结构类型:llvm::StructType*llvm_struct=llvm::StructType::create(llvm_context,struct_name);std::vectormembers;for(size_tj=0;j!=struct_data.members.size();j++){llvm::Type*member_type=/*getmembertype*/;members.push_back(member_type);}llvm_struct->setBody(members)我想知道如何访问结构中的成员。到目前为止,我已经尝试过使用g

C++ 在结构定义中初始化一个 vector

我正在阅读编程原理和实践C++,并遇到了以下我认为没有得到很好解释的代码structDay{vectorhour{vector(24,-777)};};这里发生了什么?当我需要一个具有默认值的特定长度的vector时,我通常使用这个初始化器:vectorhour(24,-777);但是,这种初始化方式在结构内部不起作用,structDay{vectorhour(24,-777);};导致编译错误Error(active)expectedatypespecifierHelloWorldd:\VisualStudio2015\HelloWorld\HelloWorld\HelloWorld

c++ - Doxygen 未记录的字符串值

Doxygen(1.8.10)提示我的字符串的值没有记录。这是一个演示问题的最小示例#includestructMyStruct///这会导致警告/tmp/example.cpp:10:warning:MemberfirstVal(variable)ofclassMyClassisnotdocumented.如果我将结构缩减为单个成员并从初始化程序中删除“secondVal”,则警告消失,但显然这不是解决方案... 最佳答案 只需删除多余的struct。如:#includestructMyStruct///C++不要求您使用stru

c++ - 如何以不同方式访问结构成员

我想要一个结构token,其中包含位置、句子和段落信息的开始/结束对。我还希望可以通过两种不同的方式访问成员:作为开始/结束对和单独访问。鉴于:structtoken{structstart_end{intstart;intend;};start_endpos;start_endsent;start_endpara;typedefstart_endtoken::*start_end_ptr;};我可以编写一个函数,比如distance(),它计算三个start/end对之间的距离,例如:intdistance(tokenconst&i,tokenconst&j,token::start