我正在尝试理解一些C ++代码。我是一名经验丰富的Java程序员,正在努力学习C ++。我已经阅读了一些关于模板的详尽文章,但没有人回答我以下模板规范的含义。
template<
template<template<class> class, class> class VisualOdometryTT,
template<class> class NodeBuilderTT,
class PoseGraphT>
class VORosInterface{ ... };
我不理解的部分是template<class>
,我认为缺少某种类型规范。但代码编译没有问题。
答案 0 :(得分:6)
以NodeBuilderTT
为例,因为它更容易:
NodeBuilderTT
是一个模板参数,它本身就是一个带有一个参数的模板 - 让我们调用Z
。
您可以选择正式命名Z
,代码编译方式相同:
template<class Z> class NodeBuilderTT
到目前为止,这与声明函数参数非常相似:
void foo(int x) {} // works
void foo(int) {} // also works
但是,通过这些函数,您通常会在函数体内使用名称x
。使用模板,您无法在Z
的定义中使用VORosInterface
,因此在命名时绝对没有意义,而且编写
template<class> class NodeBuilderTT
感谢K-ballo在这里帮助创造了记录。