程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++:模板函數需要類型轉換時使用友元(friend)模板函數

C++:模板函數需要類型轉換時使用友元(friend)模板函數

編輯:關於C++

模板函數的隱式(implicit)類型轉換, 涉及到模板參數(typename)的確定問題.

從int或double類型, 無法隱式轉換為模板類(template class)的類型, 因為無法確定模板參數類型(typename), 就無法確定構造函數的參數.

所以需要使模板函數, 與模板類擁有相同的參數類型(typename), 則需要成為模板類的友元(friend).

模板類的友元, 會隨著類的參數實例化, 而實例化參數類型, 從一個函數模板, 生成定制的函數, 即可以通過隱式類型轉換.

因為生成了定制的函數, 所以無法找到外部的模板類定義, 可以通過:

1. 直接在友元函數內部, 實現代碼(inline);

2. 在友元函數內部, 實現一個模板函數, 在把模板函數在外部實現.

代碼如下:

/* 
 * test.cpp 
 * 
 *  Created on: 2014.04.22 
 *      Author: Spike 
 */
      
/*eclipse cdt, gcc 4.8.1*/
      
#include <iostream>  
      
template<typename T> class Rational;  
      
template<typename T>  
const Rational<T> doMultiply (const Rational<T>& lhs,  
    const Rational<T>& rhs);  
      
//有理數
//
		
							
  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved