reference_wrapper 导致 "incomplete type is not allowed"
reference_wrapper cause "incomplete type is not allowed"
#include <vector>
#include <array>
int main() {
typedef std::array<int,2> point;
typedef std::vector<std::reference_wrapper<point>> route;
std::vector<std::vector<point>> lattice = {
{point{ {0,0} },point{ {0,1} }},
{point{ {1,0} },point{ {1,1} }}
};
route r = {&lattice[0][0],&lattice[0][1]};
point last = r.back().get();
}
最后一行无法编译,因为 "incomplete type is not allowed"。我在网上搜索时,似乎有一篇论文解决了这个问题:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0357r3.html。那篇论文刚好在我的水平之上。所以我不确定。谁能给这个问题的确认或解决方案?
此外,解决方法也很受欢迎:
我正在尝试将路线存储在不太大的格子上。会有很多路线(密集在格子中)。所以,我在想,在一条路线中,为了节省内存,存储点的引用而不是点。
您必须 #include <functional>
才能使用 std::reference_wrapper
。
#include <vector>
#include <array>
int main() {
typedef std::array<int,2> point;
typedef std::vector<std::reference_wrapper<point>> route;
std::vector<std::vector<point>> lattice = {
{point{ {0,0} },point{ {0,1} }},
{point{ {1,0} },point{ {1,1} }}
};
route r = {&lattice[0][0],&lattice[0][1]};
point last = r.back().get();
}
最后一行无法编译,因为 "incomplete type is not allowed"。我在网上搜索时,似乎有一篇论文解决了这个问题:http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2018/p0357r3.html。那篇论文刚好在我的水平之上。所以我不确定。谁能给这个问题的确认或解决方案?
此外,解决方法也很受欢迎:
我正在尝试将路线存储在不太大的格子上。会有很多路线(密集在格子中)。所以,我在想,在一条路线中,为了节省内存,存储点的引用而不是点。
您必须 #include <functional>
才能使用 std::reference_wrapper
。