Мне нужно создать некоторый API, с помощью которого при вызове функции будет вызываться правильный для текущей операционной системы.
Итак, я пошел с этим:
main.cpp:
#include "api.h"int main() {
helloWorld();
return 0;
}
api.h:
void helloWorld();
api.cpp:
void helloWorld() {
#ifdef __gnu_linux__
printf("Hello World of Linux");
#endif
#ifdef WIN32
printf("Hello World of Windows");
#endif
}
Но это не удовлетворяет меня. Когда у меня будут большие функции, такие как функция, позволяющая получить все дочерние элементы процесса в Linux, и многие другие, у меня возникнет проблема пространства, видимости для поддержки кода.
Я попытался включить разные заголовки в зависимости от базовой ОС, но это не очень хорошо работает, у меня не может быть двух заголовков (один для Windows, один для Linux) и только один файл C ++.
Итак, знаете ли вы, как я мог бы разделить код для Linux и Windows, чтобы я получил два файла (один только для Linux и один только для Windows) с одним заголовочным файлом, который будет иметь #ifdef
состояние ? Я не мог заставить это работать …
Я сделал это следующим образом:
main.cpp и api.h не претерпевают никаких изменений.
api.cpp:
#ifdef linux
#include "linux_api.h"#endif
#ifdef WIN32
#include "windows_api.h"#endif
void helloWorld() {
#ifdef linux
helloWorld_linux();
#endif
#ifdef WIN32
helloWorld_win32();
#endif
}
Тогда вам нужно предоставить linux_api.h
, linux_api.cpp
а также windows_api.h
, windows_api.cpp
, Преимущество состоит в том, что эти четыре файла уже зависят от платформы. Вам нужно только создать «клейкий код» в api.cpp
для каждой функции.
linux_api.h:
void helloWorld_linux();
linux_api.cpp:
#include "linux_api.h"
#include <cstdio>
void helloWorld_linux()
{
std::printf( "Hello world from linux..." );
}
Надеюсь это поможет.
Других решений пока нет …