小编Urq*_*art的帖子

如何使用泛型类型执行instanceof和typecast

在下面的代码中,我有两个方法as_Aas_B,它们基本相同,但是类型A和类型B不同。如何将这两个方法合并为一个参数化方法?中显示的方法as_T不起作用,因为泛型类型在运行时被擦除。

class A {}
class B extends A {}
class C extends A {}

B as_B(A a) {
    if (a instanceof B)
        return (B) a;
    else
        return null;
}

C as_C(A a) {
    if (a instanceof C)
        return (C) a;
    else
        return null;
}

<T extends A> T as_T(A a) {
    if (a instanceof T) // compile error because of type erasure
        return (T) a;
    else
        return null;
}
Run Code Online (Sandbox Code Playgroud)

java generics

2
推荐指数
1
解决办法
31
查看次数

子类的列表初始化

我想通过列表初始化来初始化作为 A 子类的类 B ( https://en.cppreference.com/w/cpp/language/list_initialization )

然而,它并不是这样工作的:

struct A {
   int x;
};

struct B : public A {
};

int main()
{
   A a{ 1 }; // compiles
   B b{ 2 }; // doesn't compile
}
Run Code Online (Sandbox Code Playgroud)

有没有办法通过列表初始化来初始化 B 的实例?

本质上,我想在不声明任何构造函数的情况下初始化 B 的实例。

c++ inheritance compiler-errors aggregate list-initialization

-1
推荐指数
1
解决办法
131
查看次数