今天代码遇到了返回值协变问题,不知如何解决,发出来与大家讨论一下。
首先介绍一下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中不存储智能指针,估计没有问题。求高人帮助
分享到:
相关推荐
一、重载(overload) 指函数名相同,但是它的参数表列个数或顺序,类型不同。但是不能靠返回类型来判断。...(5)返回值相同(或是协变),否则报错;<—-协变这个概念我也是第一次才知道… (6)重写函数的
根据给定的软协寒假测评试题,我们可以将其中的关键知识点归纳总结如下: ### C语言知识点 #### 1.1 强制类型转换 - **题目描述**:将一个`int`类型的变量`a`(其值为184)强制转换为`char`类型后输出。 - **知识...
2. 函数名、参数列表以及返回值必须相同(除了返回值类型可以是协变的,即派生类类型的指针或引用可以赋值给基类类型的指针或引用)。 3. 基类函数必须声明为虚函数(用`virtual`关键字)。 4. 访问修饰符可以不同,...
在 C 和 C++ 编程语言中,函数调用约定(Calling Conventions)定义了如何在函数调用时传递参数、返回值以及清理调用栈的方式。不同的调用约定适用于不同的场景,并且对程序的性能和可移植性有着重要的影响。本文将...
然而,在某些场景下,为了进一步优化性能或者实现特定硬件功能,汇编语言的使用变得不可或缺。因此,理解和掌握C语言与汇编语言的接口技术成为了一个重要的课题。本文将深入探讨在C程序中集成汇编代码的重要性及其...
C#的泛型还支持协变和逆变,使得在处理接口和委托时更加灵活。 最后,我们来看C++的模板。C++的模板功能非常强大,不仅可以用于创建泛型类,还可以用于函数。例如,一个简单的模板函数可以实现两个数值的加法: ``...
在泛型的支持上,C#的泛型机制比Java更为强大,支持类型推断和协变/逆变。Java的泛型是擦除的,而C#的泛型是类型安全的。 在多线程处理上,C#有`Task`和`Thread`等并发模型,而Java有`Thread`类和`ExecutorService`...
- **对Func和Action泛型委托使用变体**:探讨如何在Func和Action委托中应用协变。 #### 十七、LINQ to Objects - **概述**:提供了一个关于LINQ to Objects的简介。 - **LINQ和字符串**:介绍如何使用LINQ操作字符...
- 泛型:C#的泛型更强大,支持类型约束和协变/逆变;Java泛型是擦除的,不支持这些特性。 - 枚举和委托:C#的枚举和委托是类型安全的,Java的枚举和事件处理机制与此不同。 四、C#高级特性 1. LINQ(Language ...
7. **函数**: 函数的定义、调用、参数传递以及返回值。 8. **作用域和存储类型**: 变量的作用域(局部变量、全局变量等)和存储类型(自动、静态等)。 9. **递归**: 函数调用自身的方法。 10. **指针**: 包括指针的...
2. **指定平台**:如`-fp-ret-in-387`,适用于Intel 386平台,用于指定浮点数返回值存储于387浮点协处理器中。 3. **通用选项**:如`-v`表示详细模式,显示编译过程的详细信息;`--help`则提供所有可用选项的帮助...
18.5.1 协变接口 341 18.5.2 逆变接口 343 第18章快速参考 345 第19章 枚举集合 347 19.1 枚举集合中的元素 347 19.1.1 手动实现枚举器 348 19.1.2 实现ienumerable接口 352 19.2 使用迭代器来实现枚举器 354...
目录 前言i 第1章简介1 1.1 数制. . . . . . ....1.1.1 十进制....1.1.2 二进制....1.1.3 十六进制....1.2 计算机结构....1.2.1 内存....1.2.2 CPU ....1.2.3 CPU 80x86系列....1.2.4 8086 16位寄存器....1.2.5 80386 32位寄存器....