1
d 차원의 점을 정의하고 채우는 데 어려움을 겪고 있습니다. 정확히 말하자면, Boost.Geometry가 사용자에 의해 임의의 차원을 처리하도록하는 것이 불가능하다는 것 (즉, 문서와 메일 링리스트에서 본 것)입니다. 따라서 100D 또는 10000D 차원 점을 정의하려고합니다.Boost.Geometry에서 치수 점 정의
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point.hpp>
#include <boost/geometry/index/rtree.hpp>
namespace bg = boost::geometry;
namespace bgi = boost::geometry::index;
template <int CompileTimeDimension>
void do_something()
{
typedef bg::model::point<float, CompileTimeDimension, bg::cs::cartesian> point;
bgi::rtree<point, bgi::linear<8> > rt;
}
template <std::size_t D, std::size_t N>
struct fill
{
template <typename Point>
static void apply(Point& p, typename bg::coordinate_type<Point>::type const& v)
{
bg::set<D>(p, v);
fill<D + 1, N>::apply(p, v);
}
};
template <std::size_t N>
struct fill<N, N>
{
template <typename Point>
static void apply(Point&, typename bg::coordinate_type<Point>::type const&) {}
};
int main()
{
int M;
M = 100;
if (M == 100)
do_something<100>();
else if (M == 10000)
do_something<10000>();
else
std::cerr << "invalid dimension!";
point p;
if (M == 100)
fill<0, 100>::apply(p, 5);
else if (M == 10000)
fill<0, 10000>::apply(p, 5);
else
std::cerr << "invalid dimension!";
return 0;
}
오류는 컴파일러는 "포인트"의 형식 정의를 볼 수 있다는 것입니다 : 여기
내 시도와 자신의 목록에서 도움이 개발 한 코드이다. 반면에 typedef의 차원을 런타임 변수로 만들 수는 없습니다 (부스트는 나를 허용하지 않습니다 (!)). 내가 무엇을 할 수 있을지? 다른 라이브러리를 사용하는 것을 제외하고는, 이것은 더 높은 차원의 구조에서 본 최악의 인터페이스이기 때문에. 은 ++가 ../는 -std C를 0X가, 부스트 형상 깊이-170001 -ftemplate 내 겸손 opionion에서 -o 즐
. 그러나, 나는 그 요점을 채워야 만한다. 나는 10000 차원에서 포인트를 가질 것이다. 이것은 위의 fill() 메서드를 사용해야한다는 것을 의미합니다. 템플릿을 사용할 때 ... .. 점, fill() 및 main을 사용하는 경우이 오류가 발생합니다. '사용'이전에 unqualified-id가 필요합니다. – gsamaras
fill()가 동일한 값으로 채울 것입니다 . Boost를 제 목적으로 사용하기에는 너무 많은 노력을 기울였습니다. 알고리즘이 확장되지 않았다고 생각합니다. 따라서 다른 라이브러리를 사용하게 될 것입니다. – gsamaras