今天代码遇到了返回值协变问题,不知如何解决,发出来与大家讨论一下。
?
首先介绍一下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中不存储智能指针,估计没有问题。求高人帮助