欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

C++ 返回值 协变问题 博客分类: Ice,智能指针ICEC++,linux Ice协变C++ 

程序员文章站 2024-03-21 18:37:28
...

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

 

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

相关标签: Ice 协变 C++