【发布时间】:2017-11-21 00:55:40
【问题描述】:
假设我有一个使用条件编译的 C++ 类:
C.hpp
namespace NS{
class C {
public:
C(void);
~C(void);
int func( int arg1 );
private:
int memberVar;
}
C.cpp:
#include "C.hpp"
namespace NS{
C::C( void ){ memberVar = 0; }
C::~C( void ) {}
int C::func( int arg1 ){
int retval = 0;
memberVar = arg1;
#ifdef DEV_BUILD
retval = memberVar;
printf( "memberVar was set.\n" );
#endif
return retval;
}
}
(这是一个简化的示例;假设类C 有几百行长,其中一些函数使用条件编译,每个函数都使用相同的条件:#ifdef DEV_BUILD。该应用程序是一个嵌入式系统应用程序, 条件是用来区分测试硬件和生产硬件, 有一些区别)
有人建议我改为在单独的 .cpp 文件中实现 funcs……但我有点不知道最好的方法是什么。
我的第一个冲动是创建 C_dev.cpp 和 C_prod.cpp,以不同的方式实现 C::func(),然后编辑 C.cpp:
#include "C.hpp"
#ifdef DEV_BUILD
#include "C_dev.cpp"
#else
#include "C_prod.cpp"
#endif
namespace NS{
C::C( void ){ memberVar = 0; }
C::~C( void ) {}
}
...但这是不好的风格吗?还是有其他问题?
附加限制:
- 不能使用子类。
- 无法使用模板类。
(更新:建议使用单独的文件,但不是必需的。我愿意接受其他建议)
【问题讨论】:
-
我认为您可能想获得更多信息,以确保您准确了解您的编码标准的真正含义。如果您不确定来这里询问,也许您可以/应该重新向您的首席开发人员寻求更多指导和一些示例代码。
-
你对自己太苛刻了。不需要2个标题。尝试一个头文件和两个 cpp 文件:一个带有
retval和printf,一个没有。 -
@user4581301 想象一下
C类有几百行。在两个单独的 .cpp 文件中重新实现整个类会导致代码重复,我想避免这种情况 -
好的。正式答复来了。
-
天啊。花费的时间比我预期的要长。
标签: c++ conditional-compilation