C++ 返回值 协变问题_C/C++_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > C/C++ > C++ 返回值 协变问题

C++ 返回值 协变问题

 2012/6/1 16:41:30  神父不怕鬼吹灯  程序员俱乐部  我要评论(0)
  • 摘要:今天代码遇到了返回值协变问题,不知如何解决,发出来与大家讨论一下。首先介绍一下Ice的智能指针技术,是通过对象继承IceUtil::Shared,指针通过模板类IceUtil::Handle实现的。例:classValue:publicIceUtil::Shared{intv;};typedefIceUtil::Handle<Value>ValuePtr;voidtest(){ValuePtrp=newValue;}下面说一下我的问题,项目中需要构造许多Pool,我的设计如下
  • 标签:c++ 问题

今天代码遇到了返回值协变问题,不知如何解决,发出来与大家讨论一下。

?

首先介绍一下Ice的智能指针技术,是通过对象继承IceUtil::Shared,指针通过模板类IceUtil::Handle实现的。

例:

class Value : public IceUtil::Shared {

? int v;

};

?

typedef IceUtil::Handle<Value> ValuePtr;

?

void test() {

? ValuePtr p = new Value;

}

?

下面说一下我的问题,项目中需要构造许多Pool,我的设计如下:

数据存储结构抽象类

class BaseStruct : public IceUtil::Shared {

? virtual string ToString()=0;

};

typedef IceUtil::Handle<BaseStruct> BaseStructPtr;

?

class BasePool {

? virtual BaseStructPtr GetValue(Ice::Long) = 0;

? virtual size_t Size();

};

?

class AStruct : public BaseStruct {

? ...

};

typedef IceUtil::Handle<AStruct> AStructPrt;

class APool : public BasePool , Singleton<APool> {

? AStructPtr GetValue(Ice::Long) {?? //此行定义会有问题,因为编译器认为AStructPtr和BaseStructPtr无关,不能协变

?? ...

?? return a AStructPtr;

? }

? ?...

};

?

?

?

如果采用pool中不存储智能指针,估计没有问题。求高人帮助

发表评论
用户名: 匿名