为什么traits::access不能被编译(c++)

Why traits::access cannot be compiled (c++)?

本文关键字:c++ 编译 不能 traits access 为什么      更新时间:2023-10-16

我现在正在学习如何使用boost::geometry库,并且我正在遵循教程,其中引入了类型特征以使代码更通用。例如,下面的distance函数被认为是遗传的,使用性状:

struct mypoint
{
    double x, y;
};
template <typename P1, typename P2>
double distance(P1 const& a, P2 const& b)
{
    double dx = get<0>(a) - get<0>(b);
    double dy = get<1>(a) - get<1>(b);
    return std::sqrt(dx * dx + dy * dy);
}
template <typename P1, typename P2>
double distance(P1 const& a, P2 const& b)
{
    double dx = get<0>(a) - get<0>(b);
    double dy = get<1>(a) - get<1>(b);
    return std::sqrt(dx * dx + dy * dy);
}
namespace traits
{
    template <>
    struct access<mypoint, 0>
    {
        static double get(mypoint const& p)
        {
            return p.x;
        }
    };
    template <>
    struct access<mypoint, 1>
    {
        static double get(mypoint const& p)
        {
            return p.y;
        }
    };
}

但是,当我编译这些代码时,发生了以下编译错误:

Error   3   error C2913: explicit specialization; 'traits::access' is not a specialization of a class template  

任何想法?谢谢。

您已经专门化了traits::access而没有给出一般定义,因此添加:

namespace traits
{
    template <typename, int>
        struct access;
    /* ... */
}