C++ 返回值 协变问题

8 篇文章 0 订阅
2 篇文章 0 订阅

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

 

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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值