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

c – 具有默认参数的构造函数模板实例化

发布时间:2020-12-16 07:30:51 所属栏目:百科 来源:网络整理
导读:我有一个构造函数原型,看起来像: template typename type_position window( const int size[2],const char* caption="Window",const SDL_Surface* icon=NULL,bool fullscreen=false,bool vsync=true,bool resizable=false,int multisample=0,type_position
我有一个构造函数原型,看起来像:

template <typename type_position> window(
    const int size[2],const char* caption="Window",const SDL_Surface* icon=NULL,bool fullscreen=false,bool vsync=true,bool resizable=false,int multisample=0,type_position position=type_position(0)
)

然后我想构建一个实例:

new window(screen_size,"My Window",NULL,fullscreen);

问题(我假设)是不能明确指定T(即,它可以是int或long或short等).我收到错误:

error C2660: ‘window’ : function does not take 4 arguments

然后我尝试指定类型:

new window<int>(screen_size,fullscreen);

但这不起作用:

error C2512: ‘window’ : no appropriate default constructor available
error C2062: type ‘int’ unexpected

我做了一些研究,关于我能得到的最接近的问题与“C++ template function default value”类似,只是在我的情况下,模板参数可以从第一个参数推断出来.

那么,我是卡住了还是有什么我想念的?

解决方法

您不能为构造函数提供显式模板参数列表,并且不能从默认函数参数推导出模板参数,因此需要显式提供type_position position函数参数(不是默认值)以推断类型.

由于这是最后一个参数,它会阻止您使用任何构造函数的默认参数.您可以重新排序构造函数参数,以便首先给出type_position,或者您可以添加一个允许推导出它的伪参数:

template <typename type_position> window(
  type_position dummy,const int size[2],type_position position=type_position(0)
);

然后使用要推导的类型的虚拟第一个参数调用它:

new window(1,screen_size,fullscreen);

或者,如果您使用的是C 11,则可以提供默认模板参数:

template <typename type_position = int> window(
  const int size[2],type_position position=type_position(0)
);

或者,确定您是否确实需要具有需要推导的参数的模板构造函数.如果你事先不知道它是什么,你打算用type_position类型做什么?有人用std :: string作为位置参数调用该构造函数是否有效?或矢量< double>?它可能有意义,取决于你的类型的作用,但它并不总是有意义的.

(编辑:李大同)

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

    推荐文章
      热点阅读