例如,我正在制作一个包含另一个容器模板的自定义容器,并且我想在模板中不仅定义键和值的类型,还定义容器本身的类型,例如hash或map。我认为说明我观点的最好方法是举一个例子:
template <typename C, typename K, typename T>
class SuperContainer
{
public:
void insert(const K &key, const T &value) {
_innerContainer.insert(key, value);
}
T at(const K &key) const {
return _innerContainer.value(key);
}
private:
C<K, T> _innerContainer;
};
int main(int argc, char *argv[])
{
SuperContainer<QHash, int, QString> sc1;
SuperContainer<QMap, int, QString> sc2;
//...
在这种形式下,这是一个不工作的代码,但是这个想法怎么能通过其他方式实现呢?
有模板参数这样的东西。我稍微更正了你的代码,现在它可以编译了
如果编译器支持标准 17,则可以编写 typename 而不是 class。这是 typename != class 的地方之一。