【发布时间】:2018-09-16 19:13:54
【问题描述】:
我正在尝试从 davidhigh 回答的第二个答案 here 中获取 multi_index_t 代码以使用 C++11。 C++11 不支持auto& 类型返回。
我转换了类的返回类型,但我不明白如何/是否可以在不使用 C++14 的情况下支持辅助函数 multi_index()。
代码:
#include<array>
template<int dim>
struct multi_index_t
{
std::array<int, dim> size_array;
template<typename ... Args>
multi_index_t(Args&& ... args) : size_array(std::forward<Args>(args) ...) {}
struct iterator
{
struct sentinel_t {};
std::array<int, dim> index_array = {};
std::array<int, dim> const& size_array;
bool _end = false;
iterator(std::array<int, dim> const& size_array) : size_array(size_array) {}
iterator& operator++()
{
for (int i = 0;i < dim;++i)
{
if (index_array[i] < size_array[i] - 1)
{
++index_array[i];
for (int j = 0;j < i;++j) { index_array[j] = 0; }
return *this;
}
}
_end = true;
return *this;
}
std::array<int, dim>& operator*() { return index_array; }
bool operator!=(sentinel_t) const { return !_end; }
};
iterator begin() const { return iterator{ size_array }; }
iterator end() const { return typename iterator::sentinel_t{}; }
};
template<typename ... index_t>
auto multi_index(index_t&& ... index) // <-- this doesn't compile
{
static constexpr int size = sizeof ... (index_t);
auto ar = std::array<int, size>{std::forward<index_t>(index) ...};
return multi_index_t<size>(ar);
}
根据this answer,不能通过decltype()递归扩展可变参数函数模板。有任何想法吗?
【问题讨论】:
标签: c++11 templates variadic-templates variadic-functions auto