C++ 返回值 协变问题

阅读更多

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

 

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

例:

class Value : public IceUtil::Shared {

  int v;

};

 

typedef IceUtil::Handle ValuePtr;

 

void test() {

  ValuePtr p = new Value;

}

 

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

数据存储结构抽象类

class BaseStruct : public IceUtil::Shared {

  virtual string ToString()=0;

};

typedef IceUtil::Handle BaseStructPtr;

 

class BasePool {

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

  virtual size_t Size();

};

 

class AStruct : public BaseStruct {

  ...

};

typedef IceUtil::Handle AStructPrt;

class APool : public BasePool , Singleton {

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

   ...

   return a AStructPtr;

  }

   ...

};

 

 

 

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

你可能感兴趣的:(Ice,协变,C++)