c++ - 使用指针的模板函数

标签 c++ templates pointers

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

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

对于给定的 T1T2 有效。

关于c++ - 使用指针的模板函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48431460/

相关文章:

c++ - Eclipse 提示方法 c_str 无法解析

c# - 使用 dllimport 从 c# 使用非托管 c++ 时遇到问题

c - 传递二维数组时发出警告

c - 获取一个子程序以在 C 中返回三个独立的随机数数组

c++ - 如何在 C++ 上的 "double"上使用按位运算符?

c++ - 包装代码以避免重复的技术?

c++ - 在 Visual Studio 10 中使用类型转换运算符重载时出现 C2440 错误

templates - 在哪里可以找到最佳的用户案例模板?

python - 如何使用 boost::python 将模板化类作为一个类公开给 python

c - 指针内容变为 0x1