Опережающее объявление typedef типа

163
24 июня 2019, 11:40

Есть libpq, там есть объявление:

/* PGresult encapsulates the result of a query (or more precisely, of a single
 * SQL command --- a query string given to PQsendQuery can contain multiple
 * commands and thus return multiple PGresult objects).
 * The contents of this struct are not supposed to be known to applications.
 */
typedef struct pg_result PGresult;

Как правильно нужно использовать PGresult в опережающем объявлении (чтобы не тянуть заголовок libpq в .h файл)

struct pg_result; // собственно само опережающее объявление
typedef struct pg_result PGresult; // воссоздание типа PGresult

Как я понимаю это будет правильный вариант опережающего объявления, но нет ли тут каких-либо подводных камней?

Answer 1

Нужно использовать также, как в libpq

Есть libpq, там есть объявление:

/* PGresult encapsulates the result of a query (or more precisely, of a single
 * SQL command --- a query string given to PQsendQuery can contain multiple
 * commands and thus return multiple PGresult objects).
 * The contents of this struct are not supposed to be known to applications.
 */
 typedef struct pg_result PGresult;

Опережающее объявление сократит время сборки, так как компилятор не будет разбирать большие заголовки, следовательно компиляция может ускорится очень сильно.

READ ALSO
Вывести массив чисел без повторений

Вывести массив чисел без повторений

Дан отсортированный по возрастанию массив C (например, {2, 2, 2, 3, 3})Нужно вывести в консоль этот же массив C без повторений (то есть должно получиться...

145
Узнать тип на этапе компиляции

Узнать тип на этапе компиляции

Можно ли определить тип переданных параметров variadic templates, на этапе компиляции?

139
Qt C++ Несколько диапазонов с разрывом в QSpinBox, QDoubleSpinBox

Qt C++ Несколько диапазонов с разрывом в QSpinBox, QDoubleSpinBox

Как в QSpinBox, QDoubleSpinBox задать некоторый множественный диапазон? Примеры как должен работать этот SpinBox, аналогично для DoubleSpinBox: 1) Должен принимать...

143
Ошибка С2065: необъявленный идентификатор

Ошибка С2065: необъявленный идентификатор

Столкнулся с проблемой, но на существующих топиках об этой проблеме не нашел решенияЯ в затруднении, все include'ы правильно расставлены вроде,...

119