代码之家  ›  专栏  ›  技术社区  ›  Ben H

联合中的泛型结构

  •  0
  • Ben H  · 技术社区  · 14 年前

    我正在尝试创建一个通用向量类。我可以这样做:

    struct vector3 {
      union {
        struct {
          float x;
          float y;
          float z;
        };
        float v[3];
      };
    };
    

    我不能这样做:

    template<int N, typename S, typename T = double>
    class vec {
        union {
            T data[N];
            S;
        };
    };
    
    struct XY { REAL x, y; };
    typedef vec<2, XY, REAL> Vector2;
    

    因为S没有申报任何东西。

    是否有任何方法可以将通用模板参数作为联合的成员插入?本质上,我想“注入” X Y 字段到vec类中。有更好的方法吗?

    2 回复  |  直到 14 年前
        1
  •  6
  •   JoshD    14 年前

    template<int N, typename S, typename T = double>
    class vec {
        union {
            T data[N];
            S you_need_to_have_a_member_name_here;
        };
    };
    
    struct XY { REAL x, y; };
    typedef vec<2, XY, REAL> Vector2;
    

    std::vector

    Vector2::you_need_to_have_a_member_name_here.x Vector2::you_need_to_have_a_member_name_here.y

    #define Vec(D, X) struct Vector ## D { \
      X;  \
    };
    
    Vec(2, int x, y)
    Vec(3, int x, y, z)
    Vec(4, int w, x, y, z)
    Vec(5, int v, w, x, y, z)
    

        2
  •  1
  •   Donotalo    14 年前