我正在使用#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”替换为“”。工作正常。如果您的目标不是应用程序路径,则不适用。

关于c++ - C++:使用宏字符串将项目转换为动态变量的简便方法?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34949903/

10-14 00:04