在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>>();