У меня есть класс Rainfall
, реализация которого зависит от NetCDF , но проект должен быть компилируемым с или без NetCDF. Можно ли добиться условной компиляции без разбрызгивания директив препроцессора по всему коду? Какова лучшая практика в этой ситуации?
rainfall.hpp
#pragma once
class Rainfall {
public:
// several constructors, methods, and destructor
private:
// several methods and variables
};
осадков. cpp
#include "rainfall.hpp"
#include <netcdf.h>
// concrete implementation of class members
основной. cpp
#include "rainfall.hpp"
#include <stdio>
#include <cstdlib>
void main_loop();
int main(int argc, char* argv[]) {
if (user_wants_rainfall) {
#ifndef NETCDF
std::cerr << "Rainfall not available: project was not compiled with NetCDF\n";
return EXIT_FAILURE;
#endif
}
main_loop();
return EXIT_SUCCESS;
}
void main_loop() {
Rainfall rainfall;
while (t < end_time) {
if (user_wants_rainfall) rainfall.apply_to_simulation();
t++;
}
}