C++ 返回值 协变问题 博客分类: Ice,智能指针ICEC++,linux Ice协变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中不存储智能指针,估计没有问题。求高人帮助