草庐IT

c++ - 如何用支持 __LINE__ 和 __FILE__ 的内联函数替换我的 C++ 异常宏?

我目前正在阅读ScottMeyers的《EffectiveC++》一书。它说对于类似函数的宏,我应该更喜欢inline函数而不是#define。现在我尝试编写一个内联函数来替换我的异常宏。我的旧宏看起来像这样:#define__EXCEPTION(aMessage)\{\std::ostringstreamstream;\stream我的新内联函数是这样的:inlinevoid__EXCEPTION(conststd::stringaMessage){std::ostringstreamstream;stream可能有些人已经预料到,现在__FILE__和__LINE__宏没用了,因为

C++ 宏 : manipulating a parameter (specific example)

我需要更换GET("any_name")与Stringstr_any_name=getFunction("any_name");困难的部分是如何去掉引号。可能的?有什么想法吗? 最佳答案 怎么样:#defineUNSAFE_GET(X)Stringstr_##X=getFunction(#X);或者,为了防止嵌套宏问题:#defineSTRINGIFY2(x)#x#defineSTRINGIFY(x)STRINGIFY2(x)#definePASTE2(a,b)a##b#definePASTE(a,b)PASTE2(a,b)#def

c++ - C/C++ 宏,用于在不使用三元运算符的情况下查找两个数的最大值

我遇到了一个面试问题,内容如下:“在不使用标准库或三元运算符的情况下编写一个简单的C/C++宏来查找两个数中的最大值”。我需要你的帮助来解决这个问题。我知道这很简单,但我找不到。所以,把它张贴在这里。#include#definemax(x,y)/*LOGICHERE*/usingnamespacestd;voidmain(){inta=98453;intb=66394;cout 最佳答案 使用bool运算得到0或1,然后将它们相加:#definemax(x,y)(((int)((x)

c++ - VC++允许/##/作为宏的值——如何在eclipse/mingw-gcc中处理它?

我正在尝试在eclipse/mingw-gcc中编译一个真正的win32应用程序,直到现在都没有成功(参见https://stackoverflow.com/questions/9162976/how-to-compile-a-win32-application-in-eclipse-using-the-mingw-gcc-toolchain)无论如何,在解决另一个错误时,文件c:\ProgramFiles(x86)\MicrosoftSDKs\Windows\v7.0A\Include\WTypes.h中的以下行引起了我的注意好奇心:#define_VARIANT_BOOL/##/它

c++ - 在没有宏的情况下推断类型同时省略移动/复制

考虑以下简单的make_pair类:templatestructPair{Xx;Yy;};此外,我们将创建一个简单的类来显示任何移动/复制:structC{C(intn_):n(n_){};C(constC&x){n=x.n;std::cout然后我们可以运行:autoz1=Pair{C(1),C(2)};并且没有输出,C没有被移动或复制。但是,我们必须在构造函数Pair中指定类型。假设我们想推断这些。我们可以这样做:templatePairmake_pair(X&&x,Y&&y){returnPair{std::forward(x),std::forward(y)};}然后我们可以做

c++ - 展开 C 或 C++ 源文件中的单个宏

我有大量的c++源文件,我想通过扩展我指定的单个函数宏来转换它们,并保持所有其他预处理指令不变。宏的参数通常会涉及括号和大括号以及括号保护的逗号,因此使用sed和kin执行此操作似乎并不直接。更新:我们的代码大量使用宏来生成样板(例如swig的帮助程序代码)。随着我们更好地弄清楚如何做某些事情,各种宏不再做任何非常有趣的事情(例如,只是声明一些函数),许多人提示它们使代码更难阅读。我想扩展那些不太有趣的宏,这些宏可以扩展为简单的C++代码。 最佳答案 我通过在python中使用正则表达式来完成这类事情。您可以编写一个相当短的脚本来处

c++ - 如何使用 QTest QBENCHMARK 宏结果作为单元测试中的参数

我正在使用Qt中的QTest编写一些单元测试。我还遇到了QBENCHMARK宏,它对其封装的代码进行基准测试。我正在运行我的单元测试并对一些代码进行基准测试。QBENCHMARK报告执行某些方法所花费的时间,这很好。我想在单元测试中使用执行时间,例如QVERIFY2()。我该怎么做?编辑:我目前正在做的是:voidUnitTest::benchmark(){QStringstr1=QLatin1String("Thisisateststring");QStringstr2=QLatin1String("Thisisateststring");QCOMPARE(str1.localeAw

c++ - 抑制宏展开

有什么方法可以抑制预处理器宏扩展吗?我有一个现有的C头文件,它使用#define来定义一组整数,我想将它复制到具有相同值名称的C++枚举中。例如(使用C++11):enumMyEnum{VALUE,//...};#defineVALUE0MyEnumconvert(intx){if(x==VALUE){returnMyEnum::VALUE;}//...}问题当然是MyEnum::VALUE被翻译成MyEnum::0,这会导致语法错误。最好的解决方案是用枚举替换宏,但不幸的是,在我的情况下这不是一个选项。我尝试使用连接,但这没有帮助(编译器给出了同样的错误)。#defineCONCAT

c++ - 使用 static_assert 检查 Q_OBJECT 宏

如果我得到的类型声明不包含Q_OBJECT宏,我有一些有趣的需要显示编译错误。我发现了一种不好的方法。实际上它重复了Qt开发人员的想法来做同样的事情:templatevoidcheckForQObjectMacro(){reinterpret_cast(0)->qt_check_for_QOBJECT_macro(*reinterpret_cast(0));}这很好用,但确实给出了奇怪的错误消息。我想显示一条可读的消息。一种方法是使用static_assert构造。但我不知道如何实现Q_OBJECT宏存在的静态验证条件。也许有人可以提出一个漂亮的黑客?也非常感谢任何想法。

c++ - 如何在#include 指令中使用宏?

我对如何在#include指令中使用宏感到困惑。我已经这样做了:#include"../../../../GlobalDefintions.h"#include"../../../../lib/libc++/"ARCH_FAMILY_S"/"ARCH_S"/stkl/printkc/printkc.h"GlobalDefintions.h:#ifndef_GlobalDefintions_#define_GlobalDefintions_/*ArchitectureInformationStart*/#defineARCHi386#defineARCH_FAMILYx86#define