std::pair 中的模板模板参数
template template parameter in std::pair
对于 kd 树,我有一个 Node
class,如下所示:
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 class.
内部
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 的解决方案,但也没有用。
我不确定如何设置我想在这里做的事情。
任何帮助或指示将不胜感激。我不是很精通模板编程,但我正在使用这个项目来增加我的知识。
谢谢!
评论:
template<typename DataType, unsigned Dim>
using QueryResult = std::pair<float, Node<DataType, Dim>*>;
你快搞定了。与 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;
对于 kd 树,我有一个 Node
class,如下所示:
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 class.
内部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 的解决方案,但也没有用。 我不确定如何设置我想在这里做的事情。 任何帮助或指示将不胜感激。我不是很精通模板编程,但我正在使用这个项目来增加我的知识。
谢谢!
评论:
template<typename DataType, unsigned Dim>
using QueryResult = std::pair<float, Node<DataType, Dim>*>;
你快搞定了。与 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;