草庐IT

带内存的 C++ 宏?

是否可以定义宏write_foo(A);andread_foo();这样:WRITE_FOO(hello);code_block_1;READ_FOO();code_block_2;READ_FOO();WRITE_FOO(world);code_block_3;READ_FOO();code_block_4;READ_FOO();扩展为:code_block_1;hello;code_block_2;hello;code_boock_3;world;code_block_4;world;?谢谢! 最佳答案 宏不能重新定义其他宏,但

c++ - 如何保证在粘贴之前参数的完整宏扩展?

我有一个通用的宏:#definemSwitch(Root,Case)Root##_Case_##Case#definemSpecialDisplay(what,Val)mSwitch(mSpecialDisplay,what)(Val)#definemSpecialDisplay_Case_Int(Val)...dostuff#definemSpecialDisplay_Case_Float(Val)...dostuff...morespecialcases如何保证变量Case在粘贴到mSwitch之前已完全展开?如果mSwitch被传递一个文字值,它工作正常,但如果有多层间接或中间操

C++ 或宏魔法来生成方法和转发参数

我想创建一个神奇的宏或任何东西,它会生成这样的东西:MAGICAL_MACRO(return_type,method_name,...)应该像这样工作:MAGICAL_MACRO(void,Foo,inta,intb)->virtualvoidFoo(inta,intb){_obj->Foo(a,b);}这可能吗?恐怕不是。 最佳答案 两个问题:对于MAGIC_MACRO的参数,您是否愿意接受稍微不同的语法?你能用Boost.Preprocessor吗?仅header库?如果两个答案都是"is",我有一个解决方案给你:#define

c++ - Clang 定义了什么宏来宣布 C++11 模式(如果有)?

Clang定义了什么宏来宣布C++11模式(如果有)?GCC定义了__GXX_EXPERIMENTAL_CXX0X__,至少有些版本是这样的。MSVC似乎至少对_MSC_VER>=1600默认启用了支持。 最佳答案 它对每个单独的功能使用不同的预处理器测试,例如#if__has_feature(cxx_decltype)用于测试decltype是否被实现。在此处查看完整列表http://clang.llvm.org/docs/LanguageExtensions.html#checking_upcoming_features

c++ - STL 可迭代对象的迭代器循环宏

概念因此,我试图定义一个宏来简化以下代码:for(vector::iteratoriter=iterable.begin();iter!=iterable.end();iter++)和for(map::iteratoriter=iterable.begin();iter!=iterable.end();iter++)等等现有工作到目前为止,我有#defineevery(iter,iterable)::iteratoriter=iterable.begin();iter!=iterable.end();iter++for(vectorevery(iter,iterable))但我想进一步

c++ - 我可以使用流运算符重写日志记录宏以使用 C++ 模板函数吗?

我们的项目使用一个宏来使单行语句中的日志记录变得简单易行,如下所示:DEBUG_LOG(TRACE_LOG_LEVEL,"TheXvalue="宏将第二个参数转换为字符串流参数,并将其发送到常规C++记录器。这在实践中非常有效,因为它使多参数日志记录语句非常简洁。然而,ScottMeyers在EffectiveC++3rdEdition中表示,“通过使用内联函数模板,您可以获得宏的所有效率以及常规函数的所有可预测行为和类型安全性”(第2项)。我知道在C++中使用宏有很多与可预测行为相关的问题,所以我试图在我们的代码库中消除尽可能多的宏。我的日志宏定义类似于:#defineDEBUG_L

c++ - 我如何编写一个类似于 __FILE__ 的 cpp __DIR__ 宏

__FILE__和__LINE__宏内置于C预处理器中,通常用于打印带有文件名的调试输出和行号。我需要类似的东西,但只是路径末尾的目录名称。例如,如果我的代码位于:/home/davidc/some/path/to/some/code/foo/bar我需要一个宏,如果代码在/home/davidc/some/path/to/some/code中,它只会给我“bar”/foo/bee然后我需要它给我“蜜蜂”。有什么想法吗?(顺便说一句,这是针对C++应用程序的)。更新:明确地说,我正在寻找一个宏,它会在编译时给我一个包含目录名称的字符串,我不想在运行时进行任何字符串处理。

c++ - 如何使用宏或元编程在 C++ 中创建 'passthru' 函数?

所以我有一系列的全局函数,比如说:foo_f1(inta,intb,char*c);foo_f2(inta);foo_f3(char*a);我想围绕这些做一个C++包装器,比如:MyFoo::f1(inta,intb,char*c);MyFoo::f2(inta);MyFoo::f3(char*a);大约有40个这样的函数,其中35个我只想传递给全局函数,另外5个我想做一些不同的事情。理想情况下,MyFoo.cpp的实现应该是这样的:PASSTHRU(f1,(inta,intb,char*c));PASSTHRU(f2,(inta));MyFoo::f3(char*a){//domyo

c++ - C/C++ 中的 bool 是什么?关键字还是宏?

我提到了thisquestion,其中一些答案表明bool是整型(IDE也将其视为关键字)。但是,没有一个答案暗示cplusplus中提供的信息,这表示bool是通过添加的宏(在这种情况下,编译器可能会在编译时隐式添加此header以允许bool)。这是的g++版本.那么bool到底是什么?是?整型关键字还是宏? 最佳答案 在C中,bool是一个宏。C中没有名为bool的内置类型或关键字,因此典型的实现使用标准库来#definetrue和false分别为1和0。if语句的规则是根据“零”和“非零”表达式定义的,因此依赖于true和假

c++ - 在 GCC、Clang 和英特尔编译器中强制内联单个宏?

我有一个函数需要在C++11的紧密循环中内联我希望该函数在与header不同的文件中实现,并且仍然强制在使用它的任何地方内联它。另外,我想同时使用clang、GCC和Intel编译器进行编译。充实要求。我正在寻找一个允许我执行类似操作的宏:#defineforce_inline在标题中:force_inlinevoidfoo();我应该能够在实现文件中做到这一点:voidfoo(){...Code..}需要说明的是,我不想将代码放在标题中。我希望它们只包含函数的声明。有没有一种方法可以使用适用于所有这些编译器的宏来实现内联?到目前为止我最好的解决方案是这个宏:#defineforcei