在定义预处理器变量时包含不同的文件

Include different file with defining preprocessor variable

我看到了使用不同 classes 使用 -D 编译开关的非常好的示例。

但是,在我的用例中,情况有点不同,我不知道该怎么做。

对于多路复用 API,我在 3 个不同的文件中有 3 个 classes:

poll.h   -> class PollSelector   -> generic poll() works everywhere
epoll.h  -> class EPollSelector  -> Linux only epoll support
kqueue.h -> class KqueueSelector -> MacOS only kqueue

所有 3 个类都有相同的方法,所以我使用:

#include "selector/poll.h"
using MySelector = PollSelector;

我在想,如果有办法可以用 -D switch 做到这一点,但同时,如果我添加额外的多路复用 class,只能切换它带有 -D 标志,无需编辑使用它的文件。

我对其进行成像的方式是使用如下命令:

gcc -Dkqueue file.h

这会自动执行

#include "selector/kqueue.h";
using MySelector = kqueue_selector; // I will do this typedef in kqueue.h so it will compile

这可以用干净的方式完成,而无需在 C 预处理器中“潜水”吗?

这里是原文link转出
https://github.com/nmmmnu/HM4/tree/master/net/selector

generic poll() works everywhere
Linux only epoll support
MacOS only kqueue

猜想你打算做什么:

#if __LINUX__
#include "selector/kqueue.h"
using MySelector = KqueueSelector;
#elif __OSX__
#include "selector/kqueue.h";
using MySelector = EPollSelector;
#else
#include "selector/poll.h";
using MySelector = PollSelector;
#endif