`

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中不存储智能指针,估计没有问题。求高人帮助

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics