如何在宏 #define中使用大括号中的内容作为参数

lixianmin 2009-04-13 10:55:41
我的目标利用全局变量写一个用于单元测试的宏,目前只能实现成如下样子:
#define UNIT_TEST(func, x) \
class UnitTest##func\
{\
public:\
UnitTest##func(void)\
{\
x\
}\
};\
UnitTest##func unitTest##func;

比如,对一个类Demo:
class Demo
{
public:
int Add(int a, int b)
{
return a+b;
}
};

测试里面的Add函数,可以写成如下样子:

UNIT_TEST(Add,
{
Demo demo;
int a= 4;
int b=5;
assert(9==demo.Add(a, b));
})

该测试代码写在cpp文件中,这样,当debug版程序启动的时候,上述的测试代码将自动执行(release版不会执行),大家可以看到,测试代码主体实际上是写在小括号中的()。我的问题是,有没有办法将其改成写在大括号{}中的形式
即改成这样:


UNIT_TEST(Add)
{
Demo demo;
int a= 4;
int b=5;
assert(9==demo.Add(a, b));
}
...全文
862 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
lixianmin 2009-04-14
  • 打赏
  • 举报
回复
嗯, 感谢各位, 我再想想看
LemIST 2009-04-13
  • 打赏
  • 举报
回复
C++中的宏其实就是个文本替代,你最后要的是
class UnitTestAdd
{
public:
UnitTestAdd(void)
{
{
Demo demo;
int a= 4;
int b=5;
assert(9==demo.Add(a, b));
}

}
};
UnitTestAdd unitTestAdd;

单个宏是实现不了这样的替换的。
UNIT_TEST(Add)
{
Demo demo;
int a= 4;
int b=5;
assert(9==demo.Add(a, b));
}

//
可以考虑使用两个宏。
#define BeginUnitTest(func)\
class UnitTest##func \
{ \
public: \
UnitTest#func(void) \
{
#define EndUnitTest(func)\
} \
}; \
UnitTest##func unitTest#func;

然后可以写:
BeginUnitTest(Add)
{
Demo demo;
int a= 4;
int b=5;
assert(9==demo.Add(a, b));
}
EndUnitTest(Add)
taodm 2009-04-13
  • 打赏
  • 举报
回复
自己找份cppunitlite源码就能学会这种高阶宏了。
ltc_mouse 2009-04-13
  • 打赏
  • 举报
回复
用了两个宏,形式一致了,不过似乎没办法在不Debug时自动无效啊...
在不debug时使用if(0)?

#define UNIT_TEST_BEGIN(func) \
class UnitTest##func \
{\
public: \
UnitTest##func(void)\
{

#define UNIT_TEST_END(func) \
} \
}; \
UnitTest##func unitTest##func;

//使用例子:
UNIT_TEST_BEGIN(Add)
{
Demo demo;
int a= 4;
int b=5;
assert(9==demo.Add(a, b));
}
UNIT_TEST_END(Add)
baihacker 2009-04-13
  • 打赏
  • 举报
回复
一般是用具有某个签名的"动作对象"(封装某个行为)的容器.
然后将这些行为加到容器中,最后遍历容器,输出接口.

当然你封装一个动作对象,对于某个普通函数,很好办,用一个函数指针就搞定了.
但是某个类的某个方法呢?

在MCD上有实现.

一般不像楼主这样的.

cppunit里面更是雷人,一个"动作"用N多设计模式.
源码下载地址: https://pan.quark.cn/s/40677b766bda "ContextCapture 倾斜摄影快速、创新及全面空三建模与单机集群硬件部署方案2018" 此资源聚焦于倾斜摄影(ContextCapture)空三建模及单机集群硬件部署方案,致力于为用户呈现最快、最优成本效益的台式工作站、移动工作站、并行集群的多样化部署选择。以下是该资源的详细知识点概述: 一、相关设备型号说明 * UltraLAB 是西安坤隆计算机科技有限公司推出的专属图形工作站品牌,具备三大卓越优势:顶尖的计算硬件架构、精准的行业应用定制服务、专业的硬件系统优化工艺。 二、硬件部署方案 * 台式工作站部署建议:设备特色在于当前市场上最快的台式计算架构,适用于办公场景下,部门层级常规的倾斜摄影空三处理、三维建模。 * 便携式工作站部署建议:设备特色在于当前市场上最快的移动计算架构,适用于移动倾斜摄影的空三处理、三维建模工作站。 * 大数据量处理工作站推荐:设备特色在于极限自动超频加速与16个并行存储构造,具备空三处理和三维建模最强的计算性能及海量高速并行存储性能。 * 多设备并行计算集群部署建议:针对海量图像数据计算产生的巨大需求,单机计算能力处理时间过长,效率不高,通过多台机器并行集群,进行空三处理、三维建模,显著减少处理时间。 三、部署方案深入解析 * 2.1 倾斜摄影建模(台式工作站)部署方案:设备特色在于最高的计算处理能力~6核5.2GHz,内存最大配置可达64GB,配备最新图灵架构的RTX显卡,相比市场其他品牌机器(单CPU、双Xeon处理器)更快、更具成本效益。 * 2.2 倾斜摄影建模(移动便携式工作站)硬件部署方案:设备特色在于最高的计算处理能力~6...

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧