@ sehe Мой вопрос заключается в том, почему это вызывает макрос повышения, то есть не удается обнаружить реализацию метода в .cpp - Мэтью Грин 10 минут назад
Ответ на этот вопрос таков: макросы являются функцией препроцессора. Полноценная реализация предварительной обработки является дорогостоящим делом как по сложности реализации, так и по стоимости выполнения. Многие инструменты упрощают / используют ярлыки при попытке анализа кода C ++.
Точные результаты могут быть достигнуты только в том случае, если инструменты выполняют полную предварительную обработку и синтаксический анализ точно так же, как это делает компилятор¹. Если вы немного знакомы со сложностью компиляторов, то неудивительно, что очень немногие инструменты делают это.
Наиболее заметным исключением из этого правила является libclang
, которое позволяет поставщикам создавать «высокоточные» инструменты C ++ без необходимости реализации всей механики.
По этой причине я использую YouCompleteMe с compiler_commands.json
CMake, чтобы убедиться, что libclang
всегда использует одни и те же флаги и определения. Это дает лучшие дополнения и диагностику, которые я видел среди IDE и инструментов.
Тем не менее, у меня нет проблем с использованием меньших инструментов (индексация Eclipse на C ++, Microsoft Visual Studio Intellisense, завершение QtCreator²). Это просто то, что исторически связано с областью C ++, что инструменты не всегда могут быть в состоянии ухватить каждую конструкцию.
¹ И он должен использовать одинаковые пути включения, флаги и определения
² Другими заметными упоминаниями являются Doxygen и ... SourceInsight (который я никогда не использовал, но проанализировал здесь: Как я могу заставить SourceInsight понимать умные указатели? )