c – 显式模板实例化:MSVC与GCC
发布时间:2020-12-16 05:03:15 所属栏目:百科 来源:网络整理
导读:我正在尝试处理名称空间和 C中的模板.我可以得到以下代码在MSVC中编译(没有警告或错误),但我没有运气与CYGWIN / GCC的各种排列.任何帮助,将不胜感激. 在头文件中,我声明了一个模板化的子类,如下所示: #include gdal.hnamespace sfms {template class _type,
我正在尝试处理名称空间和& 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>; (注意添加的类关键字) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |