加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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>;

(注意添加的类关键字)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读