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?
Odpowiedz
Może
typedef btCollisionObjectWrapper btCollisionObject;
Lepiej to zrobić za pomocą narzędzi językowych zamiast preprocesora.
error C2371: 'btCollisionObjectWrapper': redefinicja; różne podstawowe typy – SteveDeFacto
@SteveDeFacto Dlaczego używasz obu wersji biblioteki w tym samym czasie? –
@SteveDeFacto: Chyba miałeś zamiar zrobić to w inny sposób? –
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
.
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
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
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
- 1. Scrapy `ReactorNotRestartable`: jedna klasa uruchomić dwie (lub więcej) pająki
- 2. Wirtualne dziedzictwo, jedna klasa wystarczy?
- 3. NHibernate: Jedna klasa bazowa, kilka mapowań
- 4. jak scalić dwie bitmapy jedna na drugą
- 5. Wyrównaj dwie przęsła wewnątrz td - Jedna lewa i jedna prawa
- 6. Scala: Czy istnieje sposób, aby klasa nadrzędna miała dostęp do metod zdefiniowanych tylko przez dzieci?
- 7. Kiedy klasa miała więcej niż jeden określony inicjator?
- 8. Jak sprawić, by moja klasa statyczna nie była tak statyczna?
- 9. Jak sprawić, aby Sass działał?
- 10. co jest lepsze, aby dodać dwie nazwy (-) lub (_)
- 11. Jak scalić dwie ikony? (nakładka jedna ikona na drugą)
- 12. Jedna klasa z wieloma plikami implementacyjnymi
- 13. Jedna linijka do zmiany nazwy plików
- 14. Jak stwierdzić, czy jedna klasa TClass pochodzi od innej?
- 15. Jak mogę sprawić, aby vim rozpoznawał kodowanie pliku?
- 16. jak ustawić dwie nazwy klasy dla ember.js wejściowego pomocnika
- 17. Jak sprawić, aby BufferedReader.readLine() nie zawiesił się?
- 18. Jak sprawić, aby HttpURLConnection używał serwera proxy?
- 19. Jak sprawić, aby SVG działało z IE?
- 20. Jak sprawić, aby program wsimport generował konstruktory?
- 21. Jak sprawić, aby Facebook Like Box reagował?
- 22. Jak sprawić, aby wygląd html był wyłączony?
- 23. Jak sprawić, aby slajdy jQuery były responsywne?
- 24. jak sprawić, aby mój obraz był klikalny
- 25. Jak sprawić, aby BackgroundWorker zwrócił obiekt
- 26. Jak mogę sprawić, aby RestSharp używał BSON?
- 27. Jak sprawić, aby TLS działał z java?
- 28. Jak sprawić, aby kompilator Matlab działał szybciej?
- 29. Jak mogę sprawić, aby działała dyrektywa try_files?
- 30. Jak sprawić, aby FileReader działał z Angular2
Czy to możliwe, ponieważ w twoim # zdefiniujesz średnik, który (najprawdopodobniej) nie powinien tam być? –