在C ++中使用宏的可变参量 platform.h platform_a.cc platform_b.cc main.c

问题描述

我有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(..)在两个平台之间是公共的,而无需使用预处理程序?

解决方法

这里的正常方法是将平台特定的位抽象到库中,并在它们之上进行一致的抽象。

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();
}