use*_*028 2 c++ generics templates
在Java中,如果您有类似的类:
class Box<E>
{
some code
}
Run Code Online (Sandbox Code Playgroud)
您可以使用通配符执行以下操作:
Box<?> someBox;
someBox = new Box<Integer>();
someBox = new Box<Double>();
Run Code Online (Sandbox Code Playgroud)
有没有办法在C ++中做到这一点?
用更好的话来说,如何在C ++中声明一个可以包含Box<Integer>
or Box<Double>
或or 的变量Box<WhateverDataTypeHere>
?
template <typename T> class Box
应该继承自非模板库(假设class BasicBox
)。
然后,指向的指针BasicBox
可以指向派生模板的专业化对象:
BasicBox *someBox = new Box<int>;
Run Code Online (Sandbox Code Playgroud)
或者,由于在现代C ++™中应该避免手动管理内存,因此使用智能指针将是一个更好的主意:
std::unique_ptr<BasicBox> someBox = std::make_unique<Box<int>>();
Run Code Online (Sandbox Code Playgroud)