gpt4 book ai didi

c++ - 显式模板实例化 : MSVC vs. GCC

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:40:26 24 4
gpt4 key购买 nike

我正在尝试处理 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++ 源文件,但同样没有任何乐趣。

我在各种不同的地方(在模板类 def'n 和我尝试创建对象的地方)尝试了 'template'、'typename' 和 'typedef' 关键字但没有成功,但各种有趣且经常误导GCC 的错误消息,例如:

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

当它显然是! :) 无论如何,将此代码从 MSVC 移植到 GCC 的任何帮助都会有所帮助。

谢谢!

最佳答案

您的显式模板实例化看起来不对。尝试将其替换为

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

(注意添加的class关键字)

关于c++ - 显式模板实例化 : MSVC vs. GCC,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14670330/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com