对于 kd 树,我有一个 Node
类,如下所示:
template<typename DataType, unsigned int Dim>
struct Node
{
DataType* pos;
DataType payload;
struct Node<DataType, Dim>* left;
struct Node<DataType, Dim>* right;
};
我正在尝试设置一个元组类型,它结合了从查询节点到找到的邻居的距离和邻居节点本身,如下所示:
using std::pair<float, Node<typename DataType, Dim>*> = QueryResult;
不幸的是,上面的代码给了我错误:
[...] error: wrong number of template arguments (1, should be 2)
所以我按照我在此处找到的一些主题尝试了几种不同的方法。 首先我想也许第二个参数应该不声明任何东西,但在 Node 类中声明。
using std::pair<float, Node<DataType, Dim>*> = QueryResult;
[...] error: a template-id may not appear in a using-declaration
然后我试着告诉编译器这是一个嵌套模板;
using std::pair<float, template Node<typename DataType, Dim>*> = QueryResult;
[...] error: template argument 2 is invalid
还有一个使用 adaptor class 的解决方案,但这也没有用。 我不确定如何设置我想在这里做的事情。 任何帮助或指示将不胜感激。我不是很精通模板编程,但我正在使用这个项目来增加我的知识。
谢谢!
最佳答案
你几乎拥有它。与 typedef
不同,using 声明将别名作为第一个符号。这意味着
using std::pair<float, Node<DataType, Dim>*> = QueryResult;
需要
using QueryResult = std::pair<float, Node<DataType, Dim>*>;
如果此时您不知道 DataType
和 Dim
需要什么,那么您需要将其设为模板别名,例如
template<typename DataType, unsigned int Dim>
using QueryResult = std::pair<float, Node<DataType, Dim>*>;
然后你会像这样使用它
QueryResult<type_you_want, dim_you_want> some_name;
关于c++ - std::pair 中的模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54312546/