这是函数
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";
ä½æ€»å’Œï¼ˆï¼†amp;((long)i)和&amp; q)ä¸èµ·ä½œç”¨ã€‚æ— è®ºå¦‚ä½•ï¼Œæˆ‘å¯ä»¥ä½¿ç”¨å˜é‡i调用函数,而ä¸å¿…将其值放在long类型的å¦ä¸€ä¸ªå˜é‡ä¸ï¼Œè€Œä¸æ˜¯ä½¿ç”¨å¦ä¸€ä¸ªå˜é‡è°ƒç”¨å‡½æ•°sum?我å¯ä»¥ç†è§£ï¼Œæˆ‘编写模æ¿çš„æ–¹å¼ï¼Œå®ƒå°†ç”Ÿæˆä¸¤ä¸ªå‚数属于åŒä¸€ç±»åž‹çš„函数。我想让它生æˆå…·æœ‰2ç§ä¸åŒç±»åž‹çš„å‚数函数并ä¸ä¼šé‚£ä¹ˆéš¾ï¼Œæˆ‘猜这是å¦ä¸€ç§é€‰æ‹©ã€‚
ç”案 0 :(得分: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;