作者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
1F:推 legnaleurc:有保护到吗?看来只要任一class有iii和fff这两个type 09/30 08:43
2F:→ legnaleurc:就丢得进 test_limit 09/30 08:44
3F:→ legnaleurc:真正的限制是作偏特化吧? 09/30 08:46
4F:→ POSIX:我猜测他用意是用s_limit包他想要的范围(iii and fff) 09/30 09:39
5F:推 holymars:偏特化+trait class吧? 09/30 10:14
6F:→ POSIX:推楼上 也是个好方法 09/30 12:33