在函数参数和返回类型中使用模板

时间:2021-07-09 10:58:47

标签: c++

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

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 个答案:

答案 0 :(得分:2)

你也必须定义函数模板:

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

答案 1 :(得分:1)

如果您希望它是模板,则必须将 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);