Zastanawiałem się, czy istnieje elegancki sposób rozwiązania tego problemu. Załóżmy, że istnieje wspólny nagłówek npJak uniknąć długiego czasu kompilacji dla #define we wspólnym nagłówku
// common.h
#ifndef COMMON_H
#define COMMON_H
#define ENABLE_SOMETHING
//#define ENABLE_SOMETHING_ELSE
#define ENABLE_WHATEVER
// many others
#endif
Teraz ten plik jest dołączany, powiedzmy 100 inne pliki nagłówkowe i różne #define
są używane, aby włączyć lub wyłączyć niektóre fragmenty kodu, które są ograniczone do zaledwie 1-2 plików.
Za każdym razem pojedyncza #define
została zmieniona cały projekt wydaje się być przebudowany (pracuję nad Xcode 5.1), co ma sens, ponieważ musi być dosłownie zastąpiony całym kodem, a kompilator nie może wiedzieć a priori gdzie jest używany.
Próbuję znaleźć lepszy sposób zarządzania tym, aby uniknąć długich czasów kompilacji, ponieważ te definicje rzeczywiście są wielokrotnie zmieniane. Dzielenie każdego definiowania w ich odpowiednich plikach/plikach może być rozwiązaniem, ale chciałbym, aby w praktyce wszystko było spakowane razem.
Więc zastanawiałem się, czy nie jest to wzór, który jest zwykle używany, aby rozwiązać ten problem, myślałem o konieczności
// common.h
class Enables
{
static const bool feature;
};
// common..cpp
bool Enables::feature = false;
Czy to będzie semantycznie równoważne podczas kompilacji zoptymalizowaną binarny? (np. kod wewnątrz fałszywych włączeń zniknie całkowicie).
Może PIMPL, w przypadku gdy wykonanie warunkowo coś robi lub nie. –