C++模板类的继承

template<classc>classC{};template<classa,classb>classA:publicC<c<a,b>>{};这段代码中……C<c<a... template<class c>
class C{};
template<class a,class b>
class A:public C<c<a,b>>
{};这段代码中……C<c<a,b>>……是什么意思?模板继承的语法究竟是怎样的啊!!
展开
 我来答
清影星河6A
2010-04-28 · TA获得超过851个赞
知道小有建树答主
回答量:753
采纳率:0%
帮助的人:899万
展开全部
这么短的程序,不好分析啊
发个能编译通过的,稍微完整一点的吧

C< c<a,b>> 这个写法很奇怪,一个大写的 C,一个小写的c
很晕啊,需要太多的猜测了
还是发完整程序吧
应该很简单的问题,别搞复杂了
^_^
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
我是编程爱好者
推荐于2018-04-11 · 超过16用户采纳过TA的回答
知道答主
回答量:37
采纳率:0%
帮助的人:43.5万
展开全部
类模板可以继承也可以被继承。

1.在一个类模板中,一个非依赖型基类是指:无须知道模板实参就可以完全确定类型的

基类。

例如:

template<typename X>

class Base{

public:

int basefield;

typedef int T;

};

class D1:public Base<Base<void> >{//实际上不是模板

public:

void f(){basefield = 3; }

};

template<typename T>

class D2:public Base<double>{

public:

void f() { basefield = 7; }//正常访问继承成员

T strange;//T是Base<double>::T,而不是模板参数

};

注意事项:对于模板中的非依赖类型而言,如果在他的派生类中查找一个非受限名称,

那就会先查找这个非依赖型基类,然后才会查找模板参数列表。

2.非依赖性名称不会在依赖基类中查找

template<typename X>

class Base{

public:

int basefield;

typedef int T;

};

template <typename T>

class DD:Base<T>{

public:

void f(){

basefield = 0;//problem

}

};

template<>

class Base<bool>{

public:

enum { basefield = 42 };//tricky

};

void g(DD<bool>& d){

d.f();//opps

}

//修改方案一

template <typename T>

class DD1:Base<T>{

public:

void f(){

this->basefield=0;//查找被延迟了

}

};

//修改方案二

template <typename T>

class DD2:Base<T>{

public:

void f(){

Base<T>::basefield=0;//查找被延迟了

}

};

如果使用修改方案二,如果原来的非受限非依赖型名称是被用于虚函数调用的话,

那么引入依赖性的限定的话,那么这种引入依赖性的限定将会近之虚函数调用,

从而也会改变程序的含义,当遇到第二种情况不适合的情况,可以采用方案一
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式