#c #templates #forward-declaration
#c #шаблоны #пересылка-объявление
Вопрос:
Извините, я новичок в шаблонах, и я много искал, но я не могу найти решение, как объявить вперед шаблон шаблона (класса).
Вот мой код:
#ifndef CMAP_H
#define CMAP_H
#include "qvector.h"
class CMap
{
public:
CMap(const unsigned int amp; width, const unsigned int amp; height, const unsigned int amp; hexagonRadius);
CMap(const unsigned int amp; width, const unsigned int amp; height, const unsigned int amp; hexagonRadius, const QVector<QVector<unsigned int> > amp; landType);
~CMap();
private:
class Pimple;
Pimple * d;
};
#endif // CMAP_H
Все, что я хочу, это сделать #include «qvector.h» устаревшим.
Комментарии:
1. Почему вы не хотите включать соответствующий заголовок?
2. @Джеймс, потому что он хочет ограничить количество файлов, которые перекомпилируются при qvector. h изменяется. Это благородная цель.
3. @quant_dev: Основываясь на предыдущих сообщениях OP,
QVector<T>
это из Qt; если это так, то он меняется не так часто.4. Хорошо, я думал, что это его локальный заголовочный файл, поскольку он включает его в кавычки.
5. о, извините, что цитирую это. Правильно ли я понял, что имеет смысл сделать includes устаревшим только тогда, когда включает самодельный заголовочный файл?
Ответ №1:
Это сделает
template <typename T> class QVector;
Смотрите на codepad:
#ifndef CMAP_H
#define CMAP_H
template <typename T> class QVector;
class CMap
{
public:
CMap(const unsigned int amp; width, const unsigned int amp; height, const unsigned int amp; hexagonRadius);
CMap(const unsigned int amp; width, const unsigned int amp; height, const unsigned int amp; hexagonRadius, const QVector<QVector<unsigned int> > amp; landType);
~CMap();
private:
class Pimple;
Pimple * d;
};
#endif // CMAP_H