2012-12-22 6 views
6

Używam biblioteki, która ma tylko jedną różnicę między platformami/wersjami. Jedna wersja nazywa klasę btCollisionObject, a inne wersje nazywają ją btCollisionObjectWrapper. Gdybym mógł sprawić, by ta klasa miała dwa imiona, które wciąż odnoszą się do tej klasy, wszystkie moje problemy zostaną rozwiązane. Próbowałem: #define btCollisionObject btCollisionObjectWrapper;, ale to nie działa. Jaki jest prawidłowy sposób nadania nazwom klasy drugiej po zdefiniowaniu klasy?Jak sprawić, aby jedna klasa miała dwie nazwy?

+9

Czy to możliwe, ponieważ w twoim # zdefiniujesz średnik, który (najprawdopodobniej) nie powinien tam być? –

Odpowiedz

11

Może

typedef btCollisionObjectWrapper btCollisionObject; 

Lepiej to zrobić za pomocą narzędzi językowych zamiast preprocesora.

+0

error C2371: 'btCollisionObjectWrapper': redefinicja; różne podstawowe typy – SteveDeFacto

+0

@SteveDeFacto Dlaczego używasz obu wersji biblioteki w tym samym czasie? –

+0

@SteveDeFacto: Chyba miałeś zamiar zrobić to w inny sposób? –

7

Jeśli dobrze rozumiem Twój problem, będziesz musiał znaleźć sposób na określenie platformy, na którą się kompilujesz, ponieważ nie wiem, z której platformy korzystasz, nie mogę podać żadnej porady, ale prawdopodobnie można to zrobić za pomocą makr.

Rozwiązanie twojego problemu prawdopodobnie będzie wyglądać trochę tak.

W C++ 98 za pomocą deklaracji typu

#ifdef __PLATFORM_SPECIFIC_DEFINE 
    typedef btCollisionObjectWrapper btCollisionObject; 
#endif 

w C++ 11 stosując deklarację alias, to ma tę dodatkową zaletę, że mogą one być używane z szablonami jednak w przypadku możesz uciec prostym typedef.

#ifdef __PLATFORM_SPECIFIC_DEFINE 
    using btCollisionObject = btCollisionObjectWrapper; 
#endif 

To pozwoli Ci wykorzystać btCollisionObject jako nazwę klasy dla platformy, która używa btCollisionObjectWrapper

Będziesz oczywiście musiał wymienić __PLATFORM_SPECIFIC_DEFINE z makra, która jest wyznaczona przez platformę, która używa btCollisionObjectWrapper.

+1

Aliasy typów mają także tę zaletę, że są bardziej "podobne do C++", ponieważ kładą nacisk na typy, a nie na wyrażenia, w taki sposób, w jaki składnia deklaracji C kładzie nacisk na wyrażenia. – bames53

+0

Chcę wiedzieć dokładnie, jaka jest różnica między instrukcją 'typedef' i' using'. Czy możesz wskazać mi stronę internetową/cokolwiek, co wyjaśnia różnicę? Zostanie również wykonane wyszukiwanie google prowadzące do poprawnego wyniku. – leemes

+1

Nie jestem w 100% na wszystkich różnicach, ponieważ sam tak naprawdę nie zajrzałam, jedyna różnica wymieniona na [cppreference] (http://en.cppreference.com/w/cpp/language/typedef) gdzie po raz pierwszy dowiedziałem się o "deklaracji aliasu" jest to, że można go użyć podczas tworzenia aliasu szablonu. – ctor

Powiązane problemy