我在这里做错了什么吗?我正在玩模板和指针,但我在这里遇到错误。
#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
有效。
关于c++ - 使用指针的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48431460/