c++ - 尝试将指向 int 的指针传递给需要指向 long 的指针的函数,如何执行此操作

标签 c++ templates visual-c++ pointers

这是函数

template <typename T> T sum(T *x, T *y)
{
    T z(0);
    z=*x+*y;
    return z;
}

我现在正在学习模板。

这是我在主子例程中尝试执行的操作:

int i(1), j(2);
long p(12), q(3);

std::cout<<sum(&i,&j)<<" is the output\n";
std::cout<<sum(&((long)i),&q)<<" is the second output\n";

位 sum(&((long)i),&q) 不起作用。无论如何,我是否可以使用变量 i 调用函数,而不必将其值放入另一个 long 类型的变量中,然后使用另一个变量调用函数 sum ?我可以理解,我编写模板的方式,它将生成两个参数具有相同类型的函数。我想让它生成具有两种不同类型的参数的函数一点也不难,我想这是另一种选择。

最佳答案

您不应在 sum 函数中使用指针。在这里使用它们是没有意义的。您可以使用 const 引用,因为参数不会在函数体内修改:

template <typename T> 
T sum(const T &x, const T &y)
{
    T z(0);
    z=x + y;
    return z;
}

当您使用 2 个不同类型的参数调用函数时,编译器将无法推断出模板参数类型。因此,您需要明确指出您想要哪一个:

std::cout << sum<long>(i, q) << std::endl;

您还可以强制转换其中一个参数,在这种情况下,编译器将能够推断出类型:

std::cout << sum(static_cast<long>(i), q) << std::endl;

关于c++ - 尝试将指向 int 的指针传递给需要指向 long 的指针的函数,如何执行此操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16327340/

相关文章:

c++ - 调用 avformat_write_header 函数后如何添加新流?

c++ - GLSL隔行扫描

c++ - 如何在 C++ 中加载未引用的对象?

c++ - 数组类型不可赋值

python - Django - 使用 `admin/login.html` 模板作为普通登录模板时更改 site_header

html - Angular 2。如何在模板中打印来自 @Input() 参数的 HTML 标签?

c++ - 如何将字符串转换为const char

c++ - 使用 gcc 编译时区分大小写导致错误

templates - 替换 <f :all/> tag with normal fields on custom template grails

c++ - 链接器提示找不到现有方法 (C++)