ПРИМЕЧАНИЕ. Нет, этот вопрос не является дубликатом предложенного. Мой вопрос не о том, как специализировать std::hash, а о том, разрешено ли предварительное объявление std::hash, чтобы избежать включения заголовка библиотеки.
Представьте, что у вас есть простой файл типа (в C++17):
#include
class C { /* definition */ };
namespace std {
template
struct hash {
std::size_t operator()(C const& c) const noexcept { return /* whatever */; }
};
}
Единственная причина, по которой мне нужно включить сюда , — это объявление std::hash, чтобы я мог написать свою собственную специализацию, но — это один из тех тяжелых заголовков, который добавляет около 200 мс времени компиляции вашего файла, просто включив его. Все остальные заголовки, которые также определяют std::hash для поддержки хеширования, например , или , основаны на шаблонах и тоже довольно тяжело.
Я знаю, что, как правило, вам не разрешено пересылать определения объявлений из стандартной библиотеки или писать собственные специализации, но поскольку std::hash по замыслу разрешено быть специализированным, могу ли я вместо этого переслать объявление, чтобы написать это?
class C { /* definition */ };
namespace std {
template hash;
template
struct hash {
std::size_t operator()(C const& c) const noexcept { return /* whatever */; }
};
}
Подробнее здесь: https://stackoverflow.com/questions/790 ... ard-header
Упреждающее объявление std::hash, чтобы избежать включения тяжелого стандартного заголовка [дубликат] ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
HTML Drag and Drop API Bad Performance, тестирование тяжелого хита
Anonymous » » в форуме Javascript - 0 Ответы
- 7 Просмотры
-
Последнее сообщение Anonymous
-