Что это означает в C ++ при использовании скобок после имени типа?

0

Я действительно запутался в следующем фрагменте кода C++:

// The global task manager
PT(AsyncTaskManager) taskMgr = AsyncTaskManager::get_global_ptr(); 
// The global clock
PT(ClockObject) globalClock = ClockObject::get_global_clock();

Есть ли "PT" имя типа? И почему после этого есть скобки? Я никогда не видел такого синтаксиса в C++ (может быть, я должен снова прочитать некоторые C++ учебники?)

  • 0
    выглядит как #define trick, но могут быть и подсказки компилятора. Определить макрос очень хорошо, когда есть много параметров для функций, вы даете только одно слово вместо 20 параметров
  • 2
    Выглядит как макрос #define PT(x) x* для меня.
Показать ещё 5 комментариев
Теги:

2 ответа

3
Лучший ответ

Мой второй хит Google для "c++ AsyncTaskManager" (первый - ваш вопрос здесь):

http://www.panda3d.org/forums/viewtopic.php?t=5115

Это, в свою очередь, приводит к http://www.panda3d.org/, где говорится:

Panda3D - это игровой движок, каркас для 3D-рендеринга и разработки игр для программ Python и c++.

Таким образом, вы, по-видимому, имеете дело с куском кода, связанным с этим движком (о котором я раньше не слышал). Просмотр документации в Интернете не позволяет быстро определить какое-либо определение для PT, но если вы загрузите исходный код и просто выполните поиск по всем файлам для "#define PT", voilà:

Файл pointerTo.h, начиная с строки 166:

// Finally, we'll define a couple of handy abbreviations to save on
// all that wasted typing time.

#define PT(type) PointerTo< type >

Если вы продолжите исследование, вы увидите, что PointerTo на самом деле довольно сложный класс шаблонов, задокументированный как:

PointerTo - это класс шаблонов, который реализует интеллектуальный указатель на объект, полученный из ReferenceCount.

Таким образом, PT(AsyncTaskManager) taskMgr = AsyncTaskManager::get_global_ptr(); действительно:

PointerTo<AsyncTaskManager> taskMgr = AsyncTaskManager::get_global_ptr();

Если я так скажу, я думаю, что все "потраченное время печатания", предположительно сэкономленное макросом, легко расходуется на все время чтения и исследования, необходимое для понимания кода. Об этом свидетельствует весь этот вопрос и все комментарии и ответы.

0

Это для сохранения усилий при наборе текста. Гораздо проще набрать PT(AsyncTaskManager) чем AsyncTaskManager*. Вы также можете делать такие вещи, как:

#define BEGIN {
#define END }
  • 1
    «Это для экономии усилий при наборе текста». Хм что? Если не для простых указателей, AsyncTaskManager* даже на три символа меньше.
  • 0
    Или мой личный фаворит: #define IF(x) if(x) .

Ещё вопросы

Сообщество Overcoder
Наверх
Меню