社区
工具平台和程序库
帖子详情
如何在类型推导中判断一个类是另一个类的子类?
wingfiring
2003-11-18 12:03:55
对于一个template,希望能够为某个类及其子类做特化。
怎么实现这样一个编译期的类型推导?
...全文
184
10
打赏
收藏
如何在类型推导中判断一个类是另一个类的子类?
对于一个template,希望能够为某个类及其子类做特化。 怎么实现这样一个编译期的类型推导?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用AI写文章
10 条
回复
切换为时间正序
请发表友善的回复…
发表回复
打赏红包
noirchloe
2003-11-18
打赏
举报
回复
说错了,C++设计新思维。。。。。。真丢人,哈哈
上面还可以使用std::type_info
noirchloe
2003-11-18
打赏
举报
回复
是《C++编程新思维》吧?
noirchloe
2003-11-18
打赏
举报
回复
sizeof()
dynamic_cast
合用
先比大小,然后创建指针,看是否能成功转换
wingfiring
2003-11-18
打赏
举报
回复
typedef int MyTYPE;
这是一个侵入型的设计,能不能有一个非侵入型的设计?
hpho
2003-11-18
打赏
举报
回复
<MEC> item 4
template<typename D, typename B>
class IsDerivedFrom1
{
class No{};
class Yes{No no[2];};
static Yes Test(B*);
static No Test(...);
public:
enum{Is=sizeof(Test(static_cast<D*>(0)))==sizeof(Yes)};
};
template<typename D, typename B>
class IsDerivedFrom2
{
static void Constraints(D* p)
{
B* pb = p;
pb = p;
}
protected:
IsDerivedFrom2(){void(*p)(D*)=Constraints;}
};
yjh1982
2003-11-18
打赏
举报
回复
<<C++泛型新思维>>
noirchloe
2003-11-18
打赏
举报
回复
sizeof()
Wolf0403
2003-11-18
打赏
举报
回复
如果要求是:对某个类为根的继承树上的所有类进行同样的一个特化,我有如下解决办法:用一个特定的鉴定参数。
示例代码:
class Base
{
public:
typedef int MyTYPE;
virtual void function() = 0 { cout << "Base" << endl;}
~Base(){cout << "~Base" <<endl;}
};
class D1 : public Base
{
public:
void function() { cout << "D1" << endl;}
virtual ~D1(){cout << "~D1" <<endl;}
};
template <class _Ty, typename _Id_Type = void>
struct S
{
void f()
{
cout << "Normal" << endl;
}
};
template <class _Ty>
struct S <_Ty, typename _Ty::MyTYPE>
{ // 如果对 _Ty::MyTYPE 用不同类型区分,可以对不同的继承树进行分别特化
void f()
{
cout << "Base" << endl;
}
};
int main(void)
{
S<int> s;
s.f();
S<Base, Base::MyTYPE> base;
base.f();
S<D1, D1::MyTYPE> d;
d.f();
}
yjh1982
2003-11-18
打赏
举报
回复
C++设计新思维有嘛
wingfiring
2003-11-18
打赏
举报
回复
dynamic_cast是运行期的类型识别,不是编译期的。
我想实现的是编译期的。
19
类
型
判断
模式匹配
1.
类
型
判断
Scala
中
一切的父
类
是Any。 AnyRef是Any的
子
类
,它是引用
类
型
的父
类
。 AnyVal是Any的
子
类
,它是所有值
类
型
的父
类
。 AnyVal的
子
类
有9个(基本数据
类
型
):Byte,Short,Int,Long,Double,Float,Char,boolean,Unit 2.对
类
型
的基本操作 1-
判断
当前对象是否是当前
类
型
Java
中
: obj instanceof
类
scala
中
: obj isInstanceOf[
类
] 2-将对象
类
型
强制转换 Java
中
: (
类
型
)obj scala
中
: obj.asInstanceOf[
类
] 3-获取
类
型
的Class对象
python之
判断
类
型
python
中
,isinstance()可以
判断
数据
类
型
,比如int, str,或是我们自己定义的
类
,都是可以用isinstance()来
判断
的。 以上例子
中
,Student
类
与Teacher
类
都继承自Person
类
,t为Teacher
类
的
一个
实例。由上例可以看出,
子
类
的实例是
子
类
的
类
型
,同时也是其父
类
的
类
型
,但父
类
的
类
型
不是
子
类
的
类
型
。 注意isinstance()的使用方式。 ...
C++面向对象程序设计
中
怎么
判断
一个
对象的
类
类
型
C++面向对象程序设计
中
如何
判断
一个
对象的
类
类
型
在C++面向对象程序设计
中
,有时候需要
判断
某个对象的
类
类
型
,那么可以有下列两种方法: 方法1: 采用 typeid()函数进行
判断
:(缺点:当存在继承,并且
子
类
指针赋值给父
类
指针时,此时
判断
的对象
类
型
为父
类
型
,而不是
子
类
类
型
) 对于
一个
父
类
CFather,其有两个
子
类
CChildOne,CChildTwo。那么如何
判断
一个
对象的
类
C++面向对象程序设计
中
如何
判断
一个
对象的
类
类
型
在C++面向对象程序设计
中
,有时候需要
判断
某个对象的
类
类
型
,那么可以有下列两种方法: 方法1: 采用 typeid()函数进行
判断
:(缺点:当存在继承,并且
子
类
指针赋值给父
类
指针时,此时
判断
的对象
类
型
为父
类
型
,而不是
子
类
类
型
) 对于
一个
父
类
CFather,其有两个
子
类
CChildOne,CChildTwo。那么如何
判断
一个
对象的
类
类
型
。如: CChildOne objChildOne;
C++
中
的多态
一,多态的理论
推导
1.
类
型
兼容性原则 在上一节的C++
中
的继承
中
介绍了什么是
类
型
兼容性原则。所谓的
类
型
兼容性原则是指
子
类
公有继承自父
类
时,包含了父
类
的所有属性和方法,因此父
类
所能完成的功能,使用
子
类
也可以替代完成,
子
类
是一种特殊的父
类
。所以可以使用
子
类
对象初始化父
类
对象,可以用父
类
指针指向
子
类
对象,可以用父
类
引用来引用
子
类
对象。 2.函数的重写 函数的发生在
类
的继承过程...
工具平台和程序库
24,852
社区成员
27,352
社区内容
发帖
与我相关
我的任务
工具平台和程序库
C/C++ 工具平台和程序库
复制链接
扫一扫
分享
社区描述
C/C++ 工具平台和程序库
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章