2016-07-28 16 views
6

byłem niedawno patrząc na niektóre kodu i mam natknąć to:Macro przed nazwą klasy

class IDATA_EXPORT IData { 
    /* .... */ 
} 

Gdzie IDATA_EXPORT wynosi nie więcej niż:

#ifndef IDATA_EXPORT 
    #define IDATA_EXPORT 
#endif 

Co jest IDATA_EXPORT w tym przypadku? (To znaczy, jest to typ jak int, char itp ...?)

+1

Jest to makro, które rozwija się do niczego. Tak więc to nigdy nie istniało. –

+0

Jaką rolę odgrywa ona w definicji klasy? – SnuKies

+0

[Duplicate] (http://stackoverflow.com/q/37487907/3233393), ale ten ma wartość -2. – Quentin

Odpowiedz

6

Najprawdopodobniej w pewnym momencie w czasie, lub w pewnych warunkach to zostało zdefiniowane jako (na przykład pod MSVC):

#define IDATA_EXPORT __declspec(dllexport) 

Który został użyty do wskazania klas do publicznego eksportu z biblioteki.

Korzystając z makra, programista może na przemian eksportować klasy i nie eksportować niczego, bez konieczności sprawdzania poszczególnych klas.

Jest to często część wzorca makro, który zmienia się naprzemiennie między importowaniem a eksportowaniem klas, w zależności od tego, czy kod jest kompilowany z biblioteki, czy z programu zależnego od biblioteki. Byłoby wtedy wyglądać następująco:

#ifdef IS_LIBRARY // <--this would only be defined when compiling the library! 
    #define IDATA_EXPORT __declspec(dllexport) 
#else 
    #define IDATA_EXPORT __declspec(dllimport) 
#endif 

Aby uzyskać więcej informacji, zobacz dllexport, dllimport on MSDN

+0

Będę patrzył w to, co powiedziałeś, ponieważ wciąż jest wiele rzeczy, których nie znam. To będzie dobry punkt wyjścia. Dzięki – SnuKies

Powiązane problemy