亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 2338 | 回復(fù): 4
打印 上一主題 下一主題

問個成員函數(shù)特化的問題 [復(fù)制鏈接]

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報告]
發(fā)表于 2010-12-03 23:42 |只看該作者 |倒序瀏覽

  1. #include <stdio.h>

  2. class test
  3. {
  4. public:
  5.    template<typename T>
  6.    T *malloc();
  7. };
  8. template<>
  9. int *test::malloc<int>()
  10. {
  11.   printf("int\n");
  12.   return new int;
  13. }
  14. template<>
  15. double *test::malloc<double>()
  16. {
  17.   printf("double\n");
  18.   return new double;
  19. }

  20. int main ()
  21. {
  22.   test t;
  23.   //int *p = t.malloc<int>();   這樣顯式的指定是可以的
  24.   int *p = t.malloc();
  25. }
復(fù)制代碼
這個編譯不過去,問一下能不能根據(jù)返回值泛化? 必須顯式的調(diào)用 t.malloc<int>();  嗎

論壇徽章:
1
申猴
日期:2014-02-11 14:50:31
2 [報告]
發(fā)表于 2010-12-04 00:20 |只看該作者
這個例子舉得不太對吧

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
3 [報告]
發(fā)表于 2010-12-04 08:21 |只看該作者
int *p = t.malloc(); 如果能編譯通過,那么
t.malloc(); 就應(yīng)該能編譯通過。
對于 t.malloc();,編譯器根本不知道用什么來特化。

函數(shù)返回類型的不同 不構(gòu)成重載,所以 以返回值泛化 是行不通的,但是……,可以在 返回值 賦值給調(diào)用者時做文章。你等等,我寫個事例代碼給你

論壇徽章:
14
巨蟹座
日期:2013-11-19 14:09:4615-16賽季CBA聯(lián)賽之青島
日期:2016-07-05 12:36:0515-16賽季CBA聯(lián)賽之廣東
日期:2016-06-29 11:45:542015亞冠之全北現(xiàn)代
日期:2015-07-22 08:09:472015年辭舊歲徽章
日期:2015-03-03 16:54:15巨蟹座
日期:2014-12-29 08:22:29射手座
日期:2014-12-05 08:20:39獅子座
日期:2014-11-05 12:33:52寅虎
日期:2014-08-13 09:01:31巳蛇
日期:2014-06-16 16:29:52技術(shù)圖書徽章
日期:2014-04-15 08:44:01天蝎座
日期:2014-03-11 13:06:45
4 [報告]
發(fā)表于 2010-12-04 08:28 |只看該作者
用VC2008及GCC4.5都編譯測試通過

  1. struct foo
  2. {
  3.         template<typename T> operator T*();
  4. };

  5. class test
  6. {
  7. public:
  8.         foo malloc()
  9.         {
  10.                 return foo();
  11.         }
  12. };


  13. #include <iostream>

  14. template<> foo::operator int*()
  15. {
  16.         std::cout << "int" << std::endl;
  17.         return new int;
  18. }
  19. template<> foo::operator double*()
  20. {
  21.         std::cout << "double" << std::endl;
  22.         return new double;
  23. }

  24. int main ()
  25. {
  26.         test t;
  27.         int* p1 = t.malloc();
  28.         double* p2 = t.malloc();

  29.         return 0;
  30. }
復(fù)制代碼

評分

參與人數(shù) 1可用積分 +2 收起 理由
cookis + 2

查看全部評分

論壇徽章:
1
2015年辭舊歲徽章
日期:2015-03-03 16:54:15
5 [報告]
發(fā)表于 2010-12-04 10:01 |只看該作者
哦,好方法,類型轉(zhuǎn)換!多謝了
您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP