作者POSIX (tedium of chores)
看板C_and_CPP
標題[語法] template 用法
時間Wed Sep 30 06:47:50 2009
情況特殊 容我描述一下
首先,
猜測用法是當成namespace來用
到時候餵給template當成參數用(達到限制參數的目的)
struct s_limit {
typedef int iii;
typedef float fff;
};
宣告一個dummy class
宣告成template class 的的緣故
是因為要做測試,測試template parameter是否能夠限制
template<typename T1, typename T2>
class dummy {};
測試用的template class,
限制他的template parameter 只能用s_limit 這個structure(當成namespace用)
template <typename TTT = s_limit >
class test_limit
:public dummy<typename TTT::iii, typename TTT::fff >
{
public:
test_limit(){cout<<"constructor"<<endl;}
~test_limit(){cout<<"destructor"<<endl;}
};
所以main 裡面宣告只能這樣用
int main(){
test_limit<s_limit> foo;
return 0;
}
新版的c++ standard 有針對template argument 做更多的保護
但目前似乎以這種方式可以達到"自訂的保護"
對於template 太強大,弄的我頭昏眼花
小弟我經過整理、簡化過後
簡單的把一些code和大家分享
各位有沒有什麼什麼想法?
對於這些用法有沒有更好的方式?
或是有哪些可以更延伸的討論空間?
歡迎大家指教!
--
○ ○ ◢█████◣ ○ ○ ○
○ ██◤◤◤◤▎ ○ ○
○ ◢█◥██⊙–⊙▏ 幹你媽的!沒看過人魚啊!
██████皿█ ▄▄▄▄▄▄▄ 崖上のboyo
○ ◢█∕█◥██︶◤◤ ○ ○ ○
▂▅▄▆▇ by Airsupply
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.117.176.163
推 legnaleurc:有保護到嗎?看來只要任一class有iii和fff這兩個type 09/30 08:43
→ legnaleurc:就丟得進 test_limit 09/30 08:44
→ legnaleurc:真正的限制是作偏特化吧? 09/30 08:46
→ POSIX:我猜測他用意是用s_limit包他想要的範圍(iii and fff) 09/30 09:39
推 holymars:偏特化+trait class吧? 09/30 10:14
→ POSIX:推樓上 也是個好方法 09/30 12:33