神父不怕鬼吹灯 发表于 2013-2-4 20:01:12

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中不存储智能指针,估计没有问题。求高人帮助
页: [1]
查看完整版本: C++ 返回值 协变问题