Что такое цель _p.h файлов?

В спокойных Исходных файлах существует две версии заголовочных файлов, такие как:

qxmlstream.h
qxmlstream_p.h

Почему там _p.h файлы?

6
задан Mogsdad 27 July 2015 в 19:29
поделиться

2 ответа

Обычно это частные заголовочные файлы, используемые для того, чтобы компоненты подсистемы знали обо всем, но пользователям это не нужно.

Другими словами, что-то, о чем могут захотеть узнать несколько исходных файлов C в Qt, будет находиться в частных заголовочных файлах, если пользователям Qt не нужно об этом знать.

Одним из примеров может быть настраиваемый распределитель памяти для вашей подсистемы. Возможно, вы знаете, что каждое ваше выделение памяти составляет 128 байт, тогда вы можете предоставить такой распределитель:

void * malloc128 (void) { ... }

Поскольку это, вероятно, будет иметь сомнительную ценность для пользователей вашей подсистемы, нет смысла публиковать его как часть официального API, но каждый ваш собственный исходный файл нуждается в прототипе, поэтому вы поместите его в частный заголовочный файл.

Тогда ваш собственный код использует:

#include "mysubsystem_p.h"

а пользователи вашего API используют:

#include "mysubsystem.h"
9
ответ дан 8 December 2019 в 18:32
поделиться

Qt необходимо поддерживать стабильный внешний интерфейс на уровне ссылок. Чтобы решить эту проблему, они используют следующий подход:

class MyClass {
public:
  size_t compatSize();
private:
  MyClassPrivate *data;
};


// implementation
struct MyClassPrivate {
  int someFieldThatCanChange;
};
size_t compatSize() { return (size_t)(data->someFieldThatCanChange); }

Это изменение реализации не влияет на размер и структуру MyClass . И вы по-прежнему можете добавлять новые поля или удалять старые.
Другой подход - использовать «интерфейсы» (абстрактные классы), фабрики и виртуальные функции для каждого метода, что, я думаю, приведет к более медленному коду.

3
ответ дан 8 December 2019 в 18:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: