【问题标题】:Use of templates in function parameters and return type在函数参数和返回类型中使用模板
【发布时间】:2021-07-09 10:58:47
【问题描述】:

我正在尝试在声明函数时在函数参数和返回类型中使用带有模板的结构。

template <typename T>
struct my_struct { 
  T value; 
}; 

my_struct<T> func(my_struct<T> input_1, my_struct<T> input_2);

当我尝试上面的代码时,我得到了

错误:“T”未在此范围内声明

但是,当使用具体的 data_type 声明时,它会编译。

my_struct<float> func(my_struct<float> input_1, my_struct<float> input_2);

这是否意味着,我必须为我期望的所有数据类型声明函数?显然,我误解了这里的概念。有人可以解释一下吗?

【问题讨论】:

  • 对于问题2,X不可推演,所以调用func&lt;float&gt;(t1, t2);
  • 一个问题一个问题,您可能已经问了另一个问题,而不是编辑该问题以包含额外的问题。
  • 我回滚了您的编辑。你仍然可以访问你写的here 并将其复制到一个新的问题中。尽管正如 Jarod42 所说,您要么需要指定模板参数,要么必须从函数参数中推导出来

标签: c++


【解决方案1】:

你也必须定义函数模板:

template <typename T>
my_struct<T> func(my_struct<T> input_1, my_struct<T> input_2)
{
    // ...
}

【讨论】:

    【解决方案2】:

    如果您希望 func 成为模板,则必须将其声明为模板。 T 仅在模板 my_struct 的定义内声明。

    template <typename T>
    my_struct<T> func(my_struct<T> input_1, my_struct<T> input_2);
    

    或者如果你真的不想要模板,而是 my_struct 的实例化,例如 int

    my_struct<int> func(my_struct<int> input_1, my_struct<int> input_2);
    

    【讨论】:

    • 谢谢,直到现在我都假设模板 的范围是整个文件。
    • 我已经更新了问题。你能回答问题2吗?谢谢。
    • @harry 请不要在得到答案后更改问题来询问其他问题。我的意思是你已经接受了它,但现在你改变了你的问题,使得这个答案不再回答你的问题。您可以随时提出新问题。更改问题以使答案无效是不好的。无论如何,每个问题应该有一个问题
    • 哦,抱歉,将创建一个新问题。
    猜你喜欢
    • 1970-01-01
    • 2023-01-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-23
    • 1970-01-01
    • 1970-01-01
    • 2020-10-20
    相关资源
    最近更新 更多