[問題] 限制 Template 的具現化
開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
NO
問題(Question):
最近剛初學 Template
在寫繼承的時候遇到一個問題
假設 Base class A_base 有如下的運算子重載
friend A_base operator+(const A_base &lhs,const A_base &rhs)
{
...
return Temp_A_base;
}
另有 Derived class A_derived:public A_base{...}
我希望可以不用重寫一個重載函式(因為實際上內容完全相同)如下
friend A_derived operator+(const A_derived &lhs,const A_derived &rhs)
{
...
return Temp_A_derived;
}
所以我嘗試用 Template 來簡化
程式碼如下
template<typename T>
inline T operator+( const T &lhsob, const T &rhsob )
{
...
return static_cast<T>( Temp_result );
}
然後在 class 內放
friend A_derived operator+ <A_derived> ( const A_derived&
, const A_derived& );
經測試可以運作無誤
但問題來了
我在想,這樣的寫法會不會讓引用我頭檔的使用者
寫下不是我所寫的型別的加法時不小心被我這個 Template 具現化,以致結果出錯呢?
例如他寫下
B_type a,b;
a + b;
A_derived c,d;
c + d;
然後就出錯這樣
為了解決這個問題
想請問一下
有沒有辦法指定他只能具現化特定型別的函數呢?
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 114.47.222.76
※ 編輯: birdhackor 來自: 114.47.222.76 (04/29 00:06)
→
04/29 01:41, , 1F
04/29 01:41, 1F
→
04/29 08:02, , 2F
04/29 08:02, 2F
→
04/29 08:04, , 3F
04/29 08:04, 3F
→
04/29 08:25, , 4F
04/29 08:25, 4F
→
04/29 08:26, , 5F
04/29 08:26, 5F
→
04/29 08:32, , 6F
04/29 08:32, 6F
→
04/29 09:24, , 7F
04/29 09:24, 7F
→
04/29 09:24, , 8F
04/29 09:24, 8F
順便問個問題,照理來說應該有很多函示庫有定義到
像是
template<typename T>
inline T operator+( const T &lhsob, const T &rhsob )
這樣的template
為甚麼具現化的時候不會出錯呢?
※ 編輯: birdhackor 來自: 114.47.222.76 (04/29 09:26)
→
04/29 15:02, , 9F
04/29 15:02, 9F
→
04/29 15:45, , 10F
04/29 15:45, 10F
推
04/29 17:30, , 11F
04/29 17:30, 11F
→
04/29 17:31, , 12F
04/29 17:31, 12F
→
04/29 17:32, , 13F
04/29 17:32, 13F
→
04/29 17:41, , 14F
04/29 17:41, 14F
→
04/29 17:42, , 15F
04/29 17:42, 15F
→
04/29 17:42, , 16F
04/29 17:42, 16F
→
04/29 17:49, , 17F
04/29 17:49, 17F
→
04/29 17:50, , 18F
04/29 17:50, 18F
→
04/29 17:51, , 19F
04/29 17:51, 19F
→
04/29 17:52, , 20F
04/29 17:52, 20F
→
04/29 17:52, , 21F
04/29 17:52, 21F
→
04/29 18:04, , 22F
04/29 18:04, 22F
→
04/29 18:06, , 23F
04/29 18:06, 23F
→
04/29 18:06, , 24F
04/29 18:06, 24F
→
04/29 18:08, , 25F
04/29 18:08, 25F
→
04/29 18:09, , 26F
04/29 18:09, 26F
→
04/29 18:11, , 27F
04/29 18:11, 27F
→
04/29 18:12, , 28F
04/29 18:12, 28F
→
04/29 18:13, , 29F
04/29 18:13, 29F
→
04/29 18:16, , 30F
04/29 18:16, 30F
→
04/29 18:17, , 31F
04/29 18:17, 31F
→
04/29 18:28, , 32F
04/29 18:28, 32F
→
04/29 18:28, , 33F
04/29 18:28, 33F
→
04/29 18:29, , 34F
04/29 18:29, 34F
→
04/29 18:30, , 35F
04/29 18:30, 35F
→
04/29 18:31, , 36F
04/29 18:31, 36F
→
04/29 18:31, , 37F
04/29 18:31, 37F
→
04/29 18:38, , 38F
04/29 18:38, 38F
→
04/29 18:38, , 39F
04/29 18:38, 39F
→
04/29 18:40, , 40F
04/29 18:40, 40F
→
04/29 18:40, , 41F
04/29 18:40, 41F
→
04/29 18:40, , 42F
04/29 18:40, 42F
→
04/29 18:42, , 43F
04/29 18:42, 43F
→
04/29 18:43, , 44F
04/29 18:43, 44F
→
04/29 18:43, , 45F
04/29 18:43, 45F
→
04/29 18:44, , 46F
04/29 18:44, 46F
→
04/29 18:45, , 47F
04/29 18:45, 47F
→
04/29 18:45, , 48F
04/29 18:45, 48F
→
04/29 18:46, , 49F
04/29 18:46, 49F
→
04/29 20:54, , 50F
04/29 20:54, 50F
→
04/29 20:55, , 51F
04/29 20:55, 51F
→
04/29 21:02, , 52F
04/29 21:02, 52F
→
04/29 21:03, , 53F
04/29 21:03, 53F
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):
C_and_CPP 近期熱門文章
PTT數位生活區 即時熱門文章