явная реализация шаблона: MSVC vs. GCC

Я пытаюсь разобраться с пространствами имен & шаблоны в C ++. Я могу получить следующий код для компиляции в MSVC (без предупреждений или ошибок), но мне совсем не повезло с различными перестановками с CYGWIN / GCC. Любая помощь будет оценена.

В заголовочном файле я объявляю шаблонный подкласс следующим образом:

#include <gdal.h>
namespace sfms {

template <class _type, GDALDataType _gdal> class SmfsGrid_Typed : public SfmsGrid_Base {
public:
SmfsGrid_Typed();
SmfsGrid_Typed(const SmfsGrid_Typed<_type, _gdal> *toCopy);
SmfsGrid_Typed(std::string filename);
virtual ~SmfsGrid_Typed();
virtual bool OpenRead();
virtual bool OpenWrite();

protected:
_type m_nodata_value;

virtual SfmsGrid_Base *New() const;
virtual SfmsGrid_Base *New(SfmsGrid_Base *toCopy) const;
virtual void initCopy(SfmsGrid_Base *copy) const;
};

template SmfsGrid_Typed<double, GDT_Float64>;
template SmfsGrid_Typed<float, GDT_Float32>;
template SmfsGrid_Typed<int, GDT_Int32>;

typedef SmfsGrid_Typed<double, GDT_Float64> SmfsGrid_Double;
typedef SmfsGrid_Typed<float, GDT_Float32> SmfsGrid_Float;
typedef SmfsGrid_Typed<int, GDT_Int32> SmfsGrid_Int;
}

В исходном файле я создаю экземпляр специализированного шаблона класса следующим образом:

void hi_there() {
//...
sfms::SmfsGrid_Typed<int, GDT_Int32> *grid = new sfms::SmfsGrid_Typed<int, GDT_Int32>(filey);
//...
sfms::SmfsGrid_Int *grid2 = new sfms::SmfsGrid_Int(filey);
//...
}

GDALDataType является перечислением, но это не похоже на проблему.

Я пробовал объявление класса внутри и вне пространства имен, но безуспешно.

Исходный файл, содержащий реализации шаблонов, хорошо компилируется с обоими компиляторами.

Я попытался отбросить явный экземпляр шаблона и включить соответствующий исходный файл C ++, также без радости.

Я пробовал ключевые слова «template», «typename» и «typedef» в разных местах (в шаблонном классе def’n и там, где я пытаюсь создать объект), но безуспешно, но с различными интересными и часто вводящими в заблуждение сообщениями об ошибках GCC, такие как:

error: 'SmfsGrid_Typed' is not a member of 'sfms'

когда это явно так! 🙂 В любом случае, любая помощь по переносу этого кода из MSVC в GCC поможет.

Спасибо!

5

Решение

Ваше явное создание шаблона выглядит неправильно. Попробуйте заменить его на

template class SmfsGrid_Typed<double, GDT_Float64>;
template class SmfsGrid_Typed<float, GDT_Float32>;
template class SmfsGrid_Typed<int, GDT_Int32>;

(Обратите внимание на добавленное ключевое слово класса)

3

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector