繁体   English   中英

C ++中的结构中的模板问题

[英]Issue with template in structs struct in c++

我在C ++中有一个结构,如下所示:

struct mystruct {
  template <typename T>
  T myproc() {
    std::cout << "RETURNING T";
    return T();
  }
};

现在,该结构已经存在(这只是精确结构的示例副本),我需要使用它。 我想做的是调用方法myproc()如下所示:

    int _tmain(int argc, _TCHAR* argv[])
    {
      mystruct dummystruct;
      int y = dummystruct.myproc();
      return 0;
    }

但这给了我这个编译错误:

    error C2783: 'T mystruct::myproc(void)' : could not deduce template argument for 'T'
    see declaration of 'mystruct::myproc'

我知道这是因为编译器无法知道T是什么。

所以我的问题是,结构体中的函数声明是否正确? 我不这么认为,但是该代码已经存在于我们的旧代码之一中,所以我认为我应该对此发表意见。

所以我知道它是错误的,但是如果有人认为它是正确的,那么请向我解释如何使用它。

T表示类型,例如int 写作return T; 将与return int;相同return int; Tint return int; 有效?

您可以将函数模板调用为: dummy.myproc<int>(); 您必须通过编写<int>来告知T是什么。 但是,如果函数采用了T参数,则编译器将能够通过查看参数的类型来推断T是什么。 例如dummy.myproc(2.3)将解析为Tdouble dummy.myproc(2.3)因为2.3是双dummy.myproc(2.3)

我实际上对编译后的内容感到惊讶(如果最初这样做的话?)。

可以将模板视为一种类型。 您不会返回类型吗?

您的代码可以如下所示。

struct mystruct {
  int myproc() {
    std::cout << "RETURNING INT";
    return int;
  }
};

这不是很有效。

如果要返回默认的构造值,则需要加上括号。

struct mystruct {
  template <typename T>
  T myproc() {
    std::cout << "RETURNING T";
    return T();
  }
};

但是,由于在s.myproc()的上下文中不可推导template参数, s.myproc()您将不得不执行s.myproc<mytype>()

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM