c ++中的结构体结构中的模板问题

时间:2013-06-14 17:59:29

标签: c++ templates struct

我在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

所以我的问题是,结构中的函数声明是否合适?我不这么认为,但是这段代码已经存在于我们的一个旧代码中,所以我认为我应该得到别人的意见。

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

2 个答案:

答案 0 :(得分:5)

T代表一种类型,例如int。当return T;return int;时,写Tint相同。 return int;有效吗?

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

答案 1 :(得分:5)

我实际上对编译感到惊讶(如果最初这样做了吗?)。

模板可以被认为是一种类型。你不会回来一个类型吗?

您的代码可以这样看。

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()的上下文中无法导出,因此您必须执行s.myproc<mytype>()