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



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

然而,在我的用例中,事情有点不同,我不知道如何做

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

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切换,但同时,如果我添加额外的多路复用类,就可以只用-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预处理器中?

以下是指向源的原始链接
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

相关内容

  • 没有找到相关文章

最新更新