C++:使用宏字符串将项目转换为动态变量的简单方法?
C++: Easy way to convert project using macro strings to dynamic variable?
我正在处理一个使用#define 以这种方式在磁盘上声明路径的旧项目:
#define APPPATH "c:\ProgramPath"
#define SEPARATORPATH "\"
#define DATAPATH "data"
#define CONFILEFILE "config.dat"
代码中大约有一千处,它们被用作文字字符串连接,如下所示:
std::ifstream f(APPPATH SEPARATORPATH DATAPATH SEPARATORPATH CONFILEFILE, std::ios::binary);
显然,这不是完美的方法。我目前的主要问题是硬编码的 APPPATH。我想允许程序从磁盘上的任何目录执行,并将 APPPATH 替换为可执行位置(Windows 上的 GetModuleFileName)。
我的问题是,有没有一种方法可以轻松地做到这一点,而不必修改引用宏的数千行代码?因为目前,我能找到的唯一方法是将其更改为在启动时初始化的全局 const char* 变量,然后手动替换所有行以在宏列表周围添加一个 strcat()。
在我的情况下,将 APPPATH 从 "c:\ProgramPath" 替换为“.”工作正常。如果您的目标不是应用程序路径,则不适用。
我正在处理一个使用#define 以这种方式在磁盘上声明路径的旧项目:
#define APPPATH "c:\ProgramPath"
#define SEPARATORPATH "\"
#define DATAPATH "data"
#define CONFILEFILE "config.dat"
代码中大约有一千处,它们被用作文字字符串连接,如下所示:
std::ifstream f(APPPATH SEPARATORPATH DATAPATH SEPARATORPATH CONFILEFILE, std::ios::binary);
显然,这不是完美的方法。我目前的主要问题是硬编码的 APPPATH。我想允许程序从磁盘上的任何目录执行,并将 APPPATH 替换为可执行位置(Windows 上的 GetModuleFileName)。
我的问题是,有没有一种方法可以轻松地做到这一点,而不必修改引用宏的数千行代码?因为目前,我能找到的唯一方法是将其更改为在启动时初始化的全局 const char* 变量,然后手动替换所有行以在宏列表周围添加一个 strcat()。
在我的情况下,将 APPPATH 从 "c:\ProgramPath" 替换为“.”工作正常。如果您的目标不是应用程序路径,则不适用。