#c #c 11 #variadic-functions
#c #c 11 #вариативные функции
Вопрос:
У меня есть 2 платформы, для которых требуются разные библиотечные функции, но я хочу свести к минимуму код, необходимый для их поддержки.
Код C 14 :
#ifdef PLATFORM2
#define FUNCTION_AUTO unsigned int dmd
#else
#define FUNCTION_AUTO void
#endif
//-- WITHIN THE LIBRARY -- //
double getQuality(FUNCTION_AUTO){
//Computing
// return value;
}
//-- MAIN EXECUTABLE -- //
int main() {
std::cout << "Hello World!n";
#ifdef PLATFORM2
getQuality(100);
#else
getQuality();
#endif
}
Есть ли лучший способ определить getQuality(..)
, чтобы быть общим для 2 платформ без использования манипуляций с препроцессором?
Ответ №1:
Обычным подходом здесь было бы абстрагировать биты, специфичные для платформы, в библиотеку и иметь согласованную абстракцию поверх них.
platform.h
double Quality();
platform_a.cc
#inclue "platform.h"
double Quality() {
return getQuality();
}
platform_b.cc
#include "platform.h"
double Quality() {
return getQuality(100);
}
main.c
#include <iostream>
#include "platform.h"
int main() {
std::cout << Quality();
}
Комментарии:
1. Я попробовал это в первый раз. Приведенный выше пример является одной из многочисленных функций библиотеки, и написание абстракции верхнего уровня для каждой из них на данный момент не является допустимым вариантом