header — Создайте специфичный для OS C ++ API

Мне нужно создать некоторый 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 состояние ? Я не мог заставить это работать …

2

Решение

Я сделал это следующим образом:

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..." );
}

Надеюсь это поможет.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]