C++:模板<class>是什么意思?

C++: What does template<class> mean?

本文关键字:是什么 意思 gt class lt C++ 模板      更新时间:2023-10-16

我正在努力理解一些c++代码。我是一个有经验的Java程序员,正在学习c++。我已经阅读了一些关于模板的详尽的文章,但是没有人回答我下面的模板规范是什么意思。

template<
    template<template<class> class, class> class VisualOdometryTT, 
    template<class> class NodeBuilderTT,
    class PoseGraphT> 
class VORosInterface{ ... };

我不明白的部分是template<class>,我认为缺少一些类型规范。但是代码编译没有问题。

NodeBuilderTT为例,因为它更容易:

NodeBuilderTT是一个模板参数,它本身是一个模板,有一个参数——我们叫它Z

您可以选择正式命名Z,代码将编译为相同的:

template<class Z> class NodeBuilderTT
到目前为止,这与声明函数参数非常相似:
void foo(int x) {}   // works
void foo(int)   {}   // also works

但是,对于函数,您通常会在函数体中使用名称x。对于模板,不能VORosInterface的定义中使用Z,因此命名它绝对没有意义,并且习惯地写

template<class> class NodeBuilderTT

感谢K-ballo在这里帮助澄清事实。