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&点){}
模板
模板