什么是C ++的Java通配符?

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>

Hol*_*Cat 6

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)