0

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

所以我的问题是,struct 中的函数声明是否正确?我不这么认为,但这段代码已经存在于我们的一个旧代码中,所以我认为我应该征求其他人的意见。

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

4

2 回答 2

5

T表示一种类型,例如int. 写作return T;将与return int;whenT是一样的intreturn int;有效吗?

您可以将您的函数模板称为:dummy.myproc<int>();. 你必须T通过写作告诉它是什么<int>。但是,如果该函数接受一个T参数,那么编译器将能够T通过查看参数的类型来推断出什么。例如dummy.myproc(2.3)将解析为Tadouble因为2.3是双精度数。

于 2013-06-14T18:04:46.023 回答
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>()

于 2013-06-14T18:05:05.120 回答