我在这里做错了什么吗?我在玩模板和指针,但是这里出现错误。
#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
推导出T1
。float y = 5.1;
ChangeValue<float, double>(&y, 7.9);
只要有效
*Value = NewValue;
对于给定的
T2
和有效。关于c++ - 使用指针的模板功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48431460/