Этот вопрос требует небольшого объяснения, извините.Я исправляю недосмотр в разборе doxygen, анализируя некоторый код C ++, и натолкнулся на необычный случай, который doxygen не учитывает.У меня есть исправление, но я хочу сделать его более общим, поэтому мне нужно некоторое объяснение.
Чтобы проиллюстрировать случай, когда doxygen терпит неудачу, я собираюсь определить надуманный пример с участием Симпсонов (потому что это кажется популярнымдля этих типов вопросов).Допустим, у нас есть следующее перечисление:
enum simpson { HOMER, MARGE, BART, LISA, MAGGIE };
Теперь мы хотим передать значение перечисления в метод (естественно, из класса Симпсонов), который выглядит следующим образом:
const char* voicedBy(simpson simpson)
{
switch (simpson) {
case HOMER:
return "Dan Castellaneta";
case MARGE:
return "Julie Kavner";
case BART:
return "Nancy Cartwright";
case LISA:
return "Yeardley Smith";
case MAGGIE:
return "*suck* *suck*";
}
}
К сожалению, это приводит к ошибке компилятора, потому что тип перечисления 'simpson' не может совпадать с именем параметра 'simpson' (в отличие, скажем, в C #).Но у C ++ есть ответ на это.Вы помещаете ключевое слово enum перед именем типа следующим образом:
const char* voicedBy(enum simpson simpson)
, и код теперь будет компилироваться и выполняться.К сожалению, doxygen не учитывает этот случай, и поэтому он обрабатывает всю строку «enum simpson simpson» как тип параметра без имени параметра.Я придумал некоторый код для исправления doxygen в случае перечисления, как указано выше.
Мой вопрос: для каких других типов подходит этот вид трюка?struct ?, union ?, typedef ?, другие?И если уж на то пошло, у понятия «спецификатор типа для параметра метода с тем же именем, что и у имени параметра» есть имя, чтобы я мог получить более подробную информацию о нем?