使用指针的模板函数

Template Function using Pointers

本文关键字:函数 指针      更新时间:2023-10-16

我在这里做错了什么吗?我正在使用模板和指针,但在这里遇到错误。

#include <iostream>
#include <string>
template <class T>
void ChangeValue(T*, T);
int main()
{
int x = 51;
ChangeValue(&x, 7);
std::cout << x;
float y = 5.1;
ChangeValue(&y, 7.9);
std::cout << y;
}
template <class T>
void ChangeValue(T* Value, T NewValue)
{
*Value = NewValue;
}

当您使用时:

float y = 5.1;
ChangeValue(&y, 7.9);

第一个参数的类型为float*,而第二个参数的类型为double。因此,编译器无法推断出T

修复它的一种方法是使用以下方法:

template <typename T1, typename T2 = T1>
void ChangeValue(T1* Value, T2 NewValue)
{
*Value = NewValue;
}

这样,T2是从T1推断出来的,除非用户明确覆盖它。

float y = 5.1;
ChangeValue<float, double>(&y, 7.9);

只要什么会起作用

*Value = NewValue;

对给定的T1有效,T2

&y具有float*类型,而7.9具有double类型。编译器可以通过将float*T* Value匹配来推断要floatT,也可以通过将doubleT NewValue匹配来推断double。要使模板参数推导成功,它必须是明确的。试试这个:

float y = 5.1f;
ChangeValue(&y, 7.9f);

通过这种变化,T被推断为float