结构作为模板类c ++的字段

时间:2013-10-03 18:24:47

标签: c++ templates

我是C ++的新手。我正在学习如何使用模板。 我的目标是创建“int”和“SpacePlace”PropertyType对象。 由于每个方法字符串“GrabCoordinates(...)”中的错误“C2228”(MSVC 2010),下一个代码不起作用。

struct SpacePlace
{
    float x,y,z;
};

template <class SomeType> class PropertyType
{
    SomeType variable;

    public:
    void GrabCoordinates(SpacePlace *obj)
    {
            variable.x=obj->x;
            /*varibale.x is wrong, "left of '.identifier' must
             have class/struct/union"*/
            variable.y=obj->y;//similiar error
            variable.z=obj->z;//similiar error
    }
    ...//some code
 };

  int main()
  {
          PropertyType <SpacePlace> coordinates;
          PropertyType <int> just_a_number;
          ...//some code
   }

我只是想知道,有可能实现我的目标吗?或者c ++中的模板中的字段应该只是“简单类型”?对不起我的英文:)谢谢。

3 个答案:

答案 0 :(得分:3)

你需要这样:

template <class SomeType> class PropertyType
{
    SomeType variable;

    public:
    void GrabCoordinates(const SomeType& obj)
    {
            variable=obj;

    }
    //..some code
 };

答案 1 :(得分:0)

问题在于PropertyType <int>:在模板的这个实例化中,variable被声明为int,所以你最终会得到像

这样的东西

int变量; // ... variable.x = obj-&GT; Y; ​​

由于int没有.x成员而失败。

通常,您在模板中实例化的类型必须能够履行您在模板代码中对其施加的所有“义务”。在您的情况下,这是.x成员,但它也可以是赋值,比较,增量等。

答案 2 :(得分:0)

对于PropertyType <int>variable的类型为int。所以就好像你试过了一样:

int variable;
variable.x = ojb->x;