免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
12下一页
最近访问板块 发新帖
查看: 2776 | 回复: 10
打印 上一主题 下一主题

请问如何判断类有某个属性? [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2006-12-30 17:00 |只看该作者 |倒序浏览
我的程序确实需要如下实现:

class A
{
public:
  int data1;
  int data2;
};

class B
{
public:
  int data3;
  int data4;
}

template <typename T>
void print(T &data)
{
  if (data is A) cout << data.data1;   // 请问此处如何实现??
  if (data is B) cout << data.data3;
}

论坛徽章:
0
2 [报告]
发表于 2006-12-30 17:05 |只看该作者
如果没有声明,恐怕不好办

不然要声明干什么??

光凭地址,应该没有办法判断

论坛徽章:
0
3 [报告]
发表于 2006-12-30 17:42 |只看该作者
虚继承,是吃干饭的。

论坛徽章:
0
4 [报告]
发表于 2006-12-30 21:35 |只看该作者
最简单的方法就是给出统一的接口实现。比如在两个类中都声明一个 int get_first() const 的成员函数。

论坛徽章:
0
5 [报告]
发表于 2006-12-30 23:47 |只看该作者
好像C++设计新思维中有讲的。忘了

论坛徽章:
0
6 [报告]
发表于 2006-12-30 23:49 |只看该作者
原帖由 whyglinux 于 2006-12-30 21:35 发表
最简单的方法就是给出统一的接口实现。比如在两个类中都声明一个 int get_first() const 的成员函数。

还是这样比较好

论坛徽章:
0
7 [报告]
发表于 2006-12-31 02:35 |只看该作者
动态类型转换。
自己捕获异常就可以了。

论坛徽章:
0
8 [报告]
发表于 2006-12-31 11:20 |只看该作者
#include <stdio.h>
#include <typeinfo>

class A
{
};

class B
{
};

template<typename T>
void check(T& m)
{
        if(typeid(B) == typeid(m))
                printf("m is B\n");
        if(typeid(A) == typeid(m))
                printf("m is A\n");
}

int main()
{
        A a;
        B b;

        check(a);
        check(b);
        return 1;
}

论坛徽章:
0
9 [报告]
发表于 2006-12-31 11:40 |只看该作者

暂时想采用的办法

原帖由 三省吾身 于 2006-12-30 23:47 发表
好像C++设计新思维中有讲的。忘了


此方法比较理想,但是如果类中属性多,并且
    if (data is A) data.get_first();
      if (data is B) data.get_second();
      if (data is C) data.get_third();
      ....
可能比较麻烦。

现在,初步想用dynamic_cast<>,虽然这可能是潜在错误的源泉。
   
       谢谢大家

论坛徽章:
0
10 [报告]
发表于 2006-12-31 11:41 |只看该作者

sorry 引用错了

应该引用:

    QUOTE:
      原帖由 whyglinux 于 2006-12-30 21:35 发表
    最简单的方法就是给出统一的接口实现。比如在两个类中都声明一个 int get_first() const 的成员函数。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP