检查泛型/模板类型
checks on generic/template type
我正在尝试创建一个通用容器(例如下面的java代码),它有一些限制,例如不能将大于某个限制的项放入其中。问题是,由于T是未知类型,因此具有整数的比较函数报告错误。如何解决此问题?
其次,如果代码是用C++编写的,有没有解决方案?
public class Box<T> {
private T val;
private int max;
public Box (int m, T initval) { max = m; val = initval; }
public T get() { return val; }
public void set(T newval) {
val = newval;
if(newval.toInt() >= max) // error on toInt
System.out.printf("ERR: size too bign");
}
}
您应该有
interface ToIntable {
int toInt();
}
和
public class Box<T extends ToIntable> {
...
if (newval.toInt() >= max) doSomething();
...
}
有些对象根本没有toInt()方法。在您的情况下,您只能调用Object类(所有类都从中继承)中包含的方法。
如果你确定什么类型的对象将与它一起使用,你可以将它类型转换为你想要的类型,并从中访问toInt()方法。然而,由于它是一个通用容器,您将无法控制它。
确保要执行toInt()方法的另一种方法是使泛型接受接口。您可以在接口内部定义toInt(),并且可以将容器与实现该接口的任何类一起使用。
正如我前面所说,按照您的操作方式,您只能访问Object类的方法。因此,简而言之,实现一个真正通用的容器,以您所描述的方式使用Object方法以外的任何东西是不可能的
你能用接口代替泛型吗?在这种情况下,它可能只是一个标记接口,没有方法来表示可以在容器上使用的类型。
相关文章:
- 给定一个类型,如何派生一个泛型更广泛的类型(例如,用于溢出安全求和)?
- 泛型枚举和其他类型的重载模板函数
- 使用泛型类型推送到堆栈时出现问题
- 以特征类型作为参数的泛型函数回调
- 如何在容器中指定模板化别名的泛型类型
- 具有模板专用化的泛型类型转换
- 将-Wtype限制与类型泛型代码一起使用
- C++存储泛型 T 类型类的向量
- 是否可以使用泛型枚举类型作为函数的参数?
- 如何在C++中返回没有模板的泛型类型?
- 如何在带有约束 (C++) 的函数中使用泛型类型
- 模板函数重载(泛型类型与模板模板类型)选择正确的重载
- 泛型类型别名,它们彼此不兼容
- 从具有泛型返回类型的 crtp 基类调用派生类中的函数
- 获取模板函数/泛型 lambda 的唯一返回类型
- 泛型类型转换
- 重载泛型类型的模板类时检查运算符=时的自赋值
- 为什么C类型泛型表达式不能与C++兼容
- 如何在 Java 中模拟'question mark(?)'类型泛型以C++?
- 构造函数不允许返回类型(泛型链表)