我有一个巨大的项目,我正在重构,有很多我正在更改为enums的定义语句,定义我也在一个公共文件中更改为const变量。
当我重构时,我发现一些定义在子类标题中重复。一些定义和结构甚至没有被使用或习惯。
我怎样才能让编译器指出它们,比如当编译器显示未使用的变量时?
我想搭上他们,
现在我把它们注释掉,然后手动找到需要的东西!还有其他方法吗
我有一个巨大的项目,我正在重构,有很多我正在更改为enums的定义语句,定义我也在一个公共文件中更改为const变量。
当我重构时,我发现一些定义在子类标题中重复。一些定义和结构甚至没有被使用或习惯。
我怎样才能让编译器指出它们,比如当编译器显示未使用的变量时?
我想搭上他们,
现在我把它们注释掉,然后手动找到需要的东西!还有其他方法吗
我也讨厌一个大 .h 文件中的#define contant。所以,我找到了一种通过 C++ 类型系统定义 contant 的方法。这是我两年前的工作。
------------------------------------------------------
id_system.h
------------------------------------------------------
#pragma once
template<int N>
struct ID_FACTORY{
enum {_ID=N};
static const unsigned int m_duplicate_checker;
};
#define ID_DECLARE(classname, number) \
struct classname{ \
typedef ID_FACTORY<number> MYID_TYPE; \
static const unsigned int ID; \
}; \
------------------------------------------------------
a.h
------------------------------------------------------
#pragma once
#include "id_system.h"
ID_DECLARE(WM_MESSAGE_JJ,1003)
ID_DECLARE(WM_MESSAGE_KK,1002)
------------------------------------------------------
b.h
------------------------------------------------------
#pragma once
#include "id_system.h"
ID_DECLARE(WM_MESSAGE_PP,2013)
ID_DECLARE(WM_MESSAGE_TT,2014)
ID_DECLARE(WM_MESSAGE_VV,2015)
------------------------------------------------------
id_system.cpp
------------------------------------------------------
#define ID_CHECKER(classname) \
const unsigned int classname::MYID_TYPE::m_duplicate_checker=classname::MYID_TYPE::_ID; \
const unsigned int classname::ID = classname::MYID_TYPE::m_duplicate_checker; \
#include "a.h"
#include "b.h"
ID_CHECKER(WM_MESSAGE_KK)
ID_CHECKER(WM_MESSAGE_JJ)
ID_CHECKER(WM_MESSAGE_PP)
ID_CHECKER(WM_MESSAGE_TT)
ID_CHECKER(WM_MESSAGE_VV)
------------------------------------------------------
main.cpp
------------------------------------------------------
#include "a.h"
void main(){
int x = WM_MESSAGE_KK::ID;
int y = WM_MESSAGE_JJ::ID;
}
优点:1)它可以检测重复的 id 2)客户端代码(如 main.cpp)不需要包含一个大的 .h 文件。3)编译时间大大减少了最小的依赖.h文件