今天代码遇到了返回值协变问题,不知如何解决,发出来与大家讨论一下。
首先介绍一下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中不存储智能指针,估计没有问题。求高人帮助
分享到:
相关推荐
面向对象程序设计,即C++语言,类。函数的返回值为类的类型,文件里面有详细的注释。
执行外部exe获取返回值
主要介绍了C++多线程获取返回值方法详解,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
本文主要研究的是C++函数返回值,你必须注意的问题,下面进入正题。 C++太繁杂了,先接触C++后接触python这样的语言,你就再也不想碰它,因为,就连一个函数返回值都一大堆的说道,这里面的玄机,连工作三年的C++...
C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++C++
那问题来了,我们要怎么获得线程的返回值呢? 我们通过一个例子来说明如何实现这个需求。 假设我们的app会创建一个线程来压缩一个文件夹,该线程在压缩完文件夹后会返回压缩文件 *.zip 和这个zip文件的大小,我们...
函数的返回值类型由定义函数时的指定的数据类型决定的。A项的表达式的值要转换 成函数的定义时的返回类型。
也许你从书上了解到了C++的函数参数和返回值类型有类对象,引用,指针。 但是却不知道在内存中到底是怎么回事。本文档从内存堆栈分别揭示了这6种情况下到底在这个过程中发生了什么事情。
C++ 调用带参数EXE C++ 调用带参数EXE
主要介绍了C++ 常量成员常量返回值详解,需要的朋友可以参考下
golang调用c++DLL返回值为char*参数为const char*,读取返回DLL返回值,传递char*型参数
C#调用C++生成的DLL,并返回结构体引用或者结构体指针多个值,工程已编译好
C++2005调用C#Webservice接口返回值为List,C++2005调用C#Webservice接口返回值为List
本篇文章是对C++中的内存分配、函数调用与返回值进行了详细的分析介绍,需要的朋友参考下
完整的C++调用Python脚本源码,包含参数传递和函数返回值处理等,且解决传递中文参数出现乱码等问题
在c++中,经常调用函数,而子函数经常要返回的值是数组,无论一维数组还是二维数组都需要运用到指针的知识。一维数组不再过多叙述,给了一个实例如何返回二维数组,希望对大家有帮助(主要用到指针的知识,看不懂的...
函数参数与函数调用 1、函数调用的作用: ·用实参数向形式参数传递数据; ·为获得数据参数及在函数体中声明的变量分配存储空间; ·中断现行(调用)函数,把流程向被调用函数的入口处,开始执行被调...