我的问题是我想组织我的代码,所以我可以有相同方法的 debug 和发布版本,我可以有多个定义的针对不同目标平台的相同方法。
基本上问题的核心是两者都相同,我需要具有相同的签名,但关联的定义不同。
在文件系统上组织代码以及编译和生成代码的最佳方法是什么,这样我可以保持清洁和分离?
感谢。
答案 0 :(得分:2)
// #define DEBUG - we're making a non debug version
#ifdef DEBUG
// function definition for debug
#else
// function definition for release
#endif
对于不同的操作系统也可以这样做。当然有重新编译所有这些的问题,这可能是C ++中屁股的痛苦。
答案 1 :(得分:1)
我建议您在源级别而不是在头文件上进行干预(只是为了确保保持相同的接口),例如:
//Foo.h
class Foo{
void methodA();
void methodB();
};
//Foo.cpp
// common method
Foo::methodA() { }
#ifdef _DEBUG_
Foo::methodB() { }
#elif _PLATFORM_BAR_
Foo::methodB() { }
#else
Foo:methodB() { }
#endif
相反,如果您希望将所有内容分开,则必须使用更高的杠杆,预处理器不足以有条件地包含.cpp文件而不是另一个.cpp文件。您必须使用 makefile 或您使用的任何内容。
另一种选择可能是让源文件在不在特定平台上时消失,例如:
//Foo.h
class Foo{
void methodA();
void methodB();
};
//FooCommon.cpp
void Foo::methodA() { }
//FooDebug.cpp
#ifdef _DEBUG_H
void Foo::methodB() { }
#endif
//FooRelease.cpp
#ifndef _DEBUG_H_
void Foo::methodB() { }
#endif
答案 2 :(得分:1)
如果您的编译器允许,您可以尝试将每个版本的源文件保存在单独的子文件夹中(例如#include "x86_d/test.h"
),然后使用全局宏定义来控制流程:
#define MODE_DEBUG
#ifdef MODE_DEBUG
#include "x86dbg/test.h"
#else
#include "x86rel/test.h"
#endif
您还可以为成员函数定义使用类似的结构,以便在同一文件中可以有两个不同的定义。许多编译器也使用自己的全局宏定义,因此您可以使用#define MODE_DEBUG
之类的内容而不是上面的#ifdef _CPP_RELEASE
,甚至可以通过编译器标志定义一个。