Я исключил два включения заголовков в единицу перевода, используя extern. Это целесообразно?
Моя конкретная ситуация: у меня есть класс с именем ParseTree
, который накапливает Token*
. ParseTree*
является закрытым членом Parser
.
Изначально у меня были следующие строки в parse_tree.cc
.
#include "parser.h"
#include "token.h"
Проанализировав свой код, я выделил две функции, которые на самом деле имели внешние зависимости, и заменил включение на следующее:
extern std::ostream& operator<<(std::ostream& out, const Token& t); // @token.h
extern bool hasPriority(const Token* p_tok1, Token* p_tok2); // @parser.h
Оба решения работают. Существуют ли какие-либо скрытые опасности, о которых я должен знать, выбирая extern вместо include?
extern
сама по себе избыточна. - person CB Bailey   schedule 11.08.2011