quando si scrive codice specifico per piattaforma, si usa sempre .cpp separato preferito invece di usare #ifdef?

1

Ho un codice specifico per piattaforma, come una stringa che ha bisogno di valori diversi su piattaforme diverse come questa:

test.cpp

#if(PLATFORM==ANDROID)
    string url="android";
#elif(PLATFORM==IOS)
    string url="ios";
#endif

Sto cercando di riscrivere il codice specifico della piattaforma usando cpp separato:

test.cpp

string url=URLHelper::getURL();

URLHelper.h

class URLHelper{
public:
    static std::string getURL();
};

URLHelper.cpp (nel solo percorso Android)

#include "URLHelper.h"
std::string URLHelper::getURL(){
    return "android";
}

URLHelper.cpp (nel percorso solo iOS)

#include "URLHelper.h"
std::string URLHelper::getURL(){
    return "ios";
}

Ho trovato che richiede più linee di codici rispetto a quella originale e sembra meno diretto. Inoltre, più file vengono creati, mi fa sentire più difficile da mantenere. E immagina se ho altre variabili che hanno bisogno di valori diversi su piattaforme diverse, seguendo questa regola, avrei bisogno di un altro metodo (o anche di un altro file cpp) per ogni variabile.

La mia domanda è, quando si scrive codice specifico per la piattaforma, dovremmo sempre usare un file .cpp separato invece di #ifdef, anche usando #ifdef sembra più semplice? È accettabile lasciare talvolta #ifdef?

    
posta ggrr 27.05.2016 - 10:23
fonte

1 risposta

5

Per esempi banali, qualsiasi forma di overhead aggiuntivo apparirà enorme.

Il vantaggio di separare in TU è che tu sai che tutto nel file è specifico per la piattaforma ed è possibile utilizzare la funzionalità della piattaforma in funzioni pratiche senza dover fare attenzione a posizionarlo chirurgicamente nelle sezioni del preprocessore corrette.

Questo aiuta anche a leggere il codice, poiché non è necessario fissare ciascun blocco del preprocessore per capire se si applica a una piattaforma di interesse o meno, in particolare come il numero di rami in un blocco e il loro ordine marcirà nel tempo.

    
risposta data 27.05.2016 - 10:59
fonte

Leggi altre domande sui tag