我在这里做错了什么吗?我在玩模板和指针,但是这里出现错误。

#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/

10-11 20:29