在Symbian和CE下开发,来提高生活的质量;在Windows和Linux下开发,来增添生活的色彩。在我的生活中只有一种颜色--黑色
用虚函数实现定义不同模板参数的同一个模板类对象
上一篇 /
下一篇 2006-10-14 21:58:24 / 天气: 晴朗
/ 心情: 高兴
要用自己的输入来定义同一个模板类对象,比如,我输入一个整数i,通过i值得不同,来定义不同模板参数的同一个模板类对象。用switch语句只能定义不通的模板类对象,这个行不通。那如果用宏编译#ifdef #endif对呢,形如;
template<class T> class base{...}
......
scanf(%d,&i)
switch(i)
case 1:{#define a break;};
case 2:{#define b break;};
......
#ifdef a
base<int> abc;
#ifdef b
base<float> abc;
....
#endif
这样行吗?很显然也是行不通的,因为你定义了相同的类对象,编译通不过。怎么办?
幸好c++给我们提供了虚函数,它可以迟后联编,就是在运行的时候,根据类对象来编译对应的虚函数。好的,试试看行还是不行。
template<class T> class base{...}
class type_any
{
public:
vitual base* foo()=0
}
class type_int:public type_any
{
public:
virtual base* foo()
{
return new base<int>;
}
....
}
class type_float : public type_any
{
public:
virtual base* foo()
{
return new base<float>;
}
.....
}
......
base* fun(type_any &m)
{
return m.foo;
}
type_any choose(int n)
{
switch(n)
case 1:
{
type_int le1;
return le1;
};
case 2:
{
type_float le2;
return le2;
};
......
}
viod main()
{
void*p;
int i;
cout<<"input i:"<<endl;
cin>>"%d",>>i;
p=(viod*)fun(choose(i));
.....
.....
}
千万别忘了在类中定义在堆中撤销base类的成员函数。这样就可以实现根据自己的输入,来定义不同模板参数的同一个模板类对象。*p就是模板类对象,根据不同的输入,指针p指的内容不同。也可以这样:
template<class T> class base{...}
class type_any
{
public:
vitual viod foo()=0
}
class type_int:public type_any
{
public:
virtual viod foo()
{
static base<int> abc;
}
....
}
class type_float : public type_any
{
public:
virtual void foo()
{
static base<float> abc;
}
.....
}
......
base* fun(type_any &m)
{
return m.foo;
}
type_any choose(int n)
{
switch(n)
case 1:
{
type_int le1;
return le1;
};
case 2:
{
type_float le2;
return le2;
};
......
}
viod main()
{
int i;
cout<<"input i:"<<endl;
cin>>"%d",>>i;
choose(i);
.....
.....
}
静态变量abc就可以使用了,根据不同的输入,abc模板类对象的模板参数也不同。
这是有一个会员问我的,我也不知道这样有什么好处。这是我初步的构思,我觉得要实现向我上面说的,还可以优化。因为c++的功能实在是太强大了。
大家一起讨论,不知道我的想法对不对。
相关阅读:
- vipchat为何不支持linux用户? (dogfox, 2006-10-14)
- 女孩子喜欢男孩子的6个地方 (hyf2006, 2006-10-14)
- 装机图解1 (yuduo74521, 2006-10-14)
- ....当菜霸遇到武僧 (善解人衣9011, 2006-10-14)
- 送大家一些网站数据库 (孤独骑士X, 2006-10-14)
- 免费获得qq币等各种好东西,去看看 (天生顽童, 2006-10-14)
- 有时候....... (00qq00, 2006-10-14)
- QQ密码找回指南新编 (hdq19761109, 2006-10-14)
- 吃透木马原理,把它扼杀在摇篮里 (hdq19761109, 2006-10-14)
导入论坛
引用链接
收藏
分享给好友
推荐到圈子
管理
举报
TAG:
情感绿洲