作者热门文章
- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
这是函数
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 吗?我可以理解,按照我编写模板的方式,它将生成两个参数类型相同的函数。我想让它生成具有 2 种不同类型参数的函数一点也不难,我想这是另一种选择。
最佳答案
您不应该在 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/
我是一名优秀的程序员,十分优秀!