我的C ++测试代码中有简单的委托函数。由于我不能包含原始实现.cpp文件(嵌入式文件),因此我在PC上运行的测试中使用了委托.cpp文件。我的想法是简单地使用相同的宏作为实体的主体,除了括号()和根据签名提供的参数。
我尝试过类似的事情:
void Flash::init()
{
DELEGATE_DESTINATION();
}
bool Flash::write(args)
{
DELEGATE_DESTINATION(args);
}
bool Flash::read(args)
{
DELEGATE_DESTINATION(args);
}
其中
void Flash::init()
bool Flash::write(args)
bool Flash::read(args)
与嵌入式项目实施中的相同。在测试文件中,我只是将调用转发给虚假实现。我知道,一种可能的解决方案是将签名和实现包含在不使用中继的假类中。
我很难搞清楚这个宏。我试过像:
#define FAKE_PREFIX fakes::device::Flash::
#define DELEGATE_DESTINATION FAKE_PREFIX##__FUNCTION__
扩展为 FAKE_PREFIX__FUNCTION __
那么经过C Preprocessor, Stringify the result of a macro之后 我只能假货扩展到位。
我的目标是获得像
这样的结果fakes::device::Flash::init
以及读取和写入。
答案 0 :(得分:0)
您想要做的事情可以做得更简单。您不需要预处理器的全部功能: