Шаблоны создаются, несмотря на наличие внешнего шаблонаC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Шаблоны создаются, несмотря на наличие внешнего шаблона

Сообщение Anonymous »

Я использую библиотеку glm для своей 3D-графики.
Пространство имен glm имеет псевдоним math с псевдонимами для конкретных экземпляров. Например

Код: Выделить всё

    namespace math = glm;
using short4 = math::vec;
Поскольку время компиляции файлов, содержащих glm, очень велико, я немного провел рефакторинг.
Теперь у меня есть файл для каждого glm::vec< /код> :

Код: Выделить всё

vector4.h

Код: Выделить всё

vector3.h
и т. д. содержащий следующие объявления внешнего шаблона:

Код: Выделить всё

#ifndef SRC_COMMON_VECTOR4_H
#define SRC_COMMON_VECTOR4_H
#include 
#include 
namespace glm {
extern template struct qua;
extern template struct vec;
extern template struct vec;
extern template struct vec;
extern template struct vec;
extern template struct vec;
extern template struct vec;
extern template struct vec;
extern template struct vec;
extern template struct vec;
extern template struct vec;
extern template struct vec;
}
namespace raid
{
namespace math = glm;
using quat = math::qua;
using float4 = math::vec4;
using longlong4 = math::vec;
using long4 = math::vec;
using int4 = math::vec;
using ulonglong4 = math::vec;
using ulong4 = math::vec;
using uint4 = math::vec;
using short4 = math::vec;
using ushort4 = math::vec;
using byte4 = math::vec;
using ubyte4 = math::vec;

} // namespace raid

#endif// SRC_COMMON_VECTOR4_H

соответствующий файл Vector4.cpp для явных экземпляров выглядит следующим образом:

Код: Выделить всё

#include "common/vector4.h"
namespace glm {
template struct qua;
template struct vec;
template struct vec;
template struct vec;
template struct vec;
template struct vec;
template struct vec;
template struct vec;
template struct vec;
template struct vec;
template struct vec;
template struct vec;
}
Однако, похоже, это не мешает компилятору создавать экземпляр vec!, согласно моим трассировкам, скомпилированным с -ftime-trace:
Изображение
Я хотел бы сократить время компиляции на избегая создания экземпляров в другие файлы, кроме VectorN.cpp. Что я делаю не так?

Подробнее здесь: https://stackoverflow.com/questions/793 ... n-template
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»