在定义预处理器变量时包含不同的文件
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
我看到了使用不同 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