我开发了一个小型软件,它仅将文件上传到一个提供程序。可以在编译之前设置提供程序。
实际上,我有三个相同的项目(具有相同的代码),但是具有三个不同的提供程序。为了说明这一点,我复制了两次文件夹项目,并仅修改了相对于提供程序的源代码。
我搜索一个解决方案以加入同一项目,只是在编译时设置一个“变量”以选择提供程序
我以为创建一个#define PROVIDER,提供程序= [S3 | YOUTUBE | FTP],然后编写代码
#ifdef S3
provider = new S3Provider();
#elif YOUTUBE
provider = new YoutubeProvider();
#else
provider = new FtpProvider();
#endif
这个解决方案有点难看,我不知道其他方法
你能帮我吗 ?
谢谢 !
最佳答案
如果您要进行条件编译,则可以使用预处理器定义,尽管您可以在命令行上传递值,而不用将其写入源代码。
#if defined(USE_S3)
provider = new S3Provider();
#elif defined(USE_YOUTUBE)
provider = new YoutubeProvider();
#elif defined(USE_FTP)
provider = new FtpProvider();
#else
#error You must specify a provider!
#endif
并编译
c++ -DUSE_S3 blah.cc
请注意,您不能使用
-DPROVIDER=S3
,因为#if
不允许进行字符串比较。另一种解决方案是在命令行上命名提供程序类:
#ifndef PROVIDER
#error You must specify a provider!
#endif
provider = new PROVIDER (); // The space before () is important!
然后用
c++ -DPROVIDER=S3Provider
我喜欢第一个,因为它更好地证明了三个提供程序的实现。
关于c++ - 同一代码的不同版本,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/34286310/