Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C++;-为std::array迭代器的std::array创建别名_C++_Templates_Iterator_Alias - Fatal编程技术网

C++ C++;-为std::array迭代器的std::array创建别名

C++ C++;-为std::array迭代器的std::array创建别名,c++,templates,iterator,alias,C++,Templates,Iterator,Alias,我有一个类型为std::array::iterator的迭代器数组,其中SIZE是一个模板变量 因此,拥有这些迭代器的数组将是 std::array<std::array<Point, SIZE>::iterator, SIZE> 在函数内部,我做了: template<std::size_t SIZE> template <typename T> p_iterators<SIZE> eucledian_closest(T &

我有一个类型为
std::array::iterator
的迭代器数组,其中
SIZE
是一个模板变量

因此,拥有这些迭代器的数组将是

std::array<std::array<Point, SIZE>::iterator, SIZE> 
在函数内部,我做了:

template<std::size_t SIZE>
template <typename T>
p_iterators<SIZE> eucledian_closest(T &points) {}
模板
模板
p_迭代器eucledian_最近(T&点){}
我犯了以下错误:

closest_pair.cpp:24:70: error: type/value mismatch at argument 1 in template parameter list for ‘template<class _Tp, long unsigned int _Nm> struct std::array’
 using p_iterator = std::array<std::array<Point, SIZE>::iterator, SIZE>;
                                                                      ^
closest_pair.cpp:24:70: error:   expected a type, got ‘std::array<Point, SIZE>::iterator’
closest_pair.cpp:42:1: error: ‘p_iterator’ does not name a type
 p_iterator<SIZE> eucledian_closest(T &points) {
closest_pair.cpp:24:70:错误:“模板结构std::数组”的模板参数列表中参数1的类型/值不匹配
使用p_迭代器=std::array;
^
最近的_对。cpp:24:70:错误:应为类型,获取了“std::array::iterator”
最近的\u对。cpp:42:1:错误:“p\u迭代器”未命名类型
p_迭代器eucledian_最近(T点和点){

我不知道如何为这样一个类型添加别名,甚至不知道如何在函数
template

中有另一个模板时将其与该模板一起使用。您需要为依赖类型添加
typename

template<std::size_t SIZE>
std::array<typename std::array<Point, SIZE>::iterator, SIZE>
模板
std::数组
顺便说一下,以下函数模板没有任何意义:

template<std::size_t SIZE>
template <typename T>
p_iterators<SIZE> eucledian_closest(T &points) {}
模板
模板
p_迭代器eucledian_最近(T&点){}
对于自由函数模板,您可能只有一个模板参数列表,您可能需要

template<std::size_t SIZE, typename T>
p_iterators<SIZE> eucledian_closest(T &points) {}
模板
p_迭代器eucledian_最近(T&点){}

您需要为您的从属类型添加
typename

template<std::size_t SIZE>
std::array<typename std::array<Point, SIZE>::iterator, SIZE>
模板
std::数组
顺便说一下,以下函数模板没有任何意义:

template<std::size_t SIZE>
template <typename T>
p_iterators<SIZE> eucledian_closest(T &points) {}
模板
模板
p_迭代器eucledian_最近(T&点){}
对于自由函数模板,您可能只有一个模板参数列表,您可能需要

template<std::size_t SIZE, typename T>
p_iterators<SIZE> eucledian_closest(T &points) {}
模板
p_迭代器eucledian_最近(T&点){}
在C++中,模板类型名称需要关键字,即代码>类型名称< /COD> .<
您应该将别名从更改为

template<std::size_t SIZE>
using p_iterators = std::array<std::array<Point, SIZE>::iterator, SIZE>;
通过以上操作,您可以执行
eucledian\u最近(myArray)
。但是,如果您不需要在函数中使用
SIZE
,只需执行以下操作即可

template<typename T>
auto eucledian_closest(T& points) {}
模板
自欧氏最近点(T&点){}

简单地称之为“代码> EndodiangNeXield:MyLoad < /Cord>.< /P>< P> C++中,模板类型名称需要关键字,<代码>类型名 .< 您应该将别名从更改为

template<std::size_t SIZE>
using p_iterators = std::array<std::array<Point, SIZE>::iterator, SIZE>;
通过以上操作,您可以执行
eucledian\u最近(myArray)
。但是,如果您不需要在函数中使用
SIZE
,只需执行以下操作即可

template<typename T>
auto eucledian_closest(T& points) {}
模板
自欧氏最近点(T&点){}

只需将其称为
eucledian_nestest(myArray)

其他答案解释了如何更正别名。至于函数,我认为有几种方法可以解决此问题。最简单的方法是对返回值使用类型推断,如果您希望T为std::array类型,则可以应用此方法:

template <typename T>
auto euclidean_closest(T& points) { 
  // some code
  T some_arr;  // the compiler will know what size to use
  return some_arr;
}
模板
自欧几里德_最近点(T&点){
//一些代码
T some_arr;//编译器将知道要使用的大小
返回一些arr;
}
如果需要提供尺寸,可以使用:

template <typename T, size_t SIZE>
p_iterators<SIZE> euclidean_closest(T& points) {}
模板
p_迭代器欧几里德(T&点){}

其他答案解释了如何更正别名。至于函数,我认为有几种方法可以解决此问题。最简单的方法是对返回值使用类型推断,如果您希望T为std::array类型,则可以应用此方法:

template <typename T>
auto euclidean_closest(T& points) { 
  // some code
  T some_arr;  // the compiler will know what size to use
  return some_arr;
}
模板
自欧几里德_最近点(T&点){
//一些代码
T some_arr;//编译器将知道要使用的大小
返回一些arr;
}
如果需要提供尺寸,可以使用:

template <typename T, size_t SIZE>
p_iterators<SIZE> euclidean_closest(T& points) {}
模板
p_迭代器欧几里德(T&点){}
模板
模板