我看到了使用-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