在Java中,如果您有类似的类:

class Box<E>
{
    some code
}

您可以使用通配符执行以下操作:
Box<?> someBox;
someBox = new Box<Integer>();
someBox = new Box<Double>();

有没有办法在C++中做到这一点?

用更好的话来说,我如何在C++中声明一个可以容纳Box<Integer>Box<Double>Box<WhateverDataTypeHere>的变量?

最佳答案

template <typename T> class Box应该继承自非模板库(假设class BasicBox)。

然后,指向BasicBox的指针可以指向派生模板的特化对象:

BasicBox *someBox = new Box<int>;

或者,由于在现代C++™中应该避免手动管理内存,因此使用智能指针将是一个更好的主意:

std::unique_ptr<BasicBox> someBox = std::make_unique<Box<int>>();

09-06 15:00