我正在尝试在函数参数中使用带有模板的结构,并在声明函数时返回类型。
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);
这是否意味着我必须为我期望的所有数据类型声明函数?显然,我误解了这里的概念。有人能解释一下吗?
答案 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);