Как объявить foward шаблоном шаблона (класса)

#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