• 4191阅读
  • 9回复

[提问]接受任意类型参数的问题 [复制链接]

上一主题 下一主题
离线inside
 
只看楼主 倒序阅读 楼主  发表于: 2011-12-18
比如有个函数,它接受的参数可能是任意类型的.但是它的参数原型只能是定死的。

所以需要让参数能够传递进来,而且还能转换成它原本的类型。

这个怎么处理呢?

我想到了QVariant

但是貌似不行

求教各位  谢谢


离线jdwx

只看该作者 1楼 发表于: 2011-12-18
回 楼主(inside) 的帖子
QVariant还是合适的。
可以把函数原型写出来,大家一起研究研究。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线inside
只看该作者 2楼 发表于: 2011-12-18
  1. struct FlagStruct
  2. {
  3.     public:
  4.         QString pipeName;
  5.         QTcpSocket *s;
  6.         QString shareMemName;
  7. };
  8. class UserUnit : public QObject
  9. {
  10.         Q_OBJECT
  11.     public:
  12.         UserUnit(QVariant f, Flag_Tag ft)
  13.         {
  14.             m_flag = ft;
  15.             if (f.canConvert< FlagStruct >())
  16.             {
  17.                 m_fs = f.value<FlagStruct>();
  18.             }
  19.         }
  20.         void SendPackage();
  21.     Q_SIGNALS:
  22.         void packageArrived();
  23.     private:
  24.         FlagStruct m_fs;
  25.         int m_flag;
  26. };
因为传递给UserUnit构造函数的参数可能是  qstring 也可能是  QTcpsocket*。而userunit需要判断应该是什么类型的。

我现在是这么写的。但是感觉有点脱裤子放屁的感觉。因为调用时候是这样的:
  1. FlagStruct f;
  2. f.pipeName = "charme";
  3. QVariant a;
  4. a.setValue(f);
  5. UserUnit *u = new UserUnit(f,1);


离线roywillow

只看该作者 3楼 发表于: 2011-12-18
如果说就这两种情况的话函数重载应该不麻烦吧
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线transformer

只看该作者 4楼 发表于: 2011-12-18
qobject_cast<T*>可以吗?
dynamic_cast<T*>可以吗?

冒死只要把对象指针穿进去就行了对吧


离线jdwx

只看该作者 5楼 发表于: 2011-12-18
回 2楼(inside) 的帖子

实在看不出来QVariant在这里有什么用,
既然用到了struct为什么不在里面增加一个储存状态的变量,根据这个变量就可以判断。还有QVariant 自己就可以判断内部的数据类型。
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线ninsun

只看该作者 6楼 发表于: 2011-12-19
函数重载很麻烦吗……
比起纠结如何设计通用的,写个重载更简单吧……
离线XChinux

只看该作者 7楼 发表于: 2011-12-19
类型数目是有限的,那如楼上所说更方便些。

万能大法:传递指针,反正都是长整型,强制转换。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线inside
只看该作者 8楼 发表于: 2011-12-21
回 7楼(XChinux) 的帖子
传 QObject* ? 还是 void*?
离线XChinux

只看该作者 9楼 发表于: 2011-12-21
void *
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
快速回复
限100 字节
 
上一个 下一个