类中的Typedef

时间:2013-03-05 16:45:28

标签: c++ typedef

如何在函数内输入typedef? 让我们考虑B类有一个int x datamember。当我尝试编译以下内容时,我得到:'。'标记

之前的预期初始化程序

在这个示例中,一切都很简单,但对于我的代码,我将执行类似test.x.y.z.f的操作。所以我在对象中有多个对象,直到我到达我需要的数据库,因此typedef会有所帮助。

class A
{
  B test;

  A(B test1)
  { 
    test = test1;
  }

  function f()
  {
    typedef test.x x; //how come this doesn't compile?

  }
}

4 个答案:

答案 0 :(得分:4)

x变量而不是类型。在C ++ 11中,您可以使用decltype来确定x的类型:

void f()
{
    decltype(test.x) x;
}

或者,您可以声明对您希望使用的成员的本地引用:

void f()
{
    auto& x_ref(test.x); // Or explictly state the type.
}

答案 1 :(得分:1)

如果要使用变量模拟typedef,请使用引用。 type_of_x& x = test.x;

答案 2 :(得分:1)

typedef为类型引入了一个名称 test.x是变量,而不是类型 它是 int,但它本身不是int类型。

如果要为变量引入新名称,请使用 references

int& x = test.x;  // "x" is now a different name for test.x
int& y = test.x.y.z.f; // "y" is now a different name for test.x.y.z.f.

答案 3 :(得分:1)

认为你要求的是一种“缩写”长序列名称内容的方法。我过去(相关)的方式是使用引用:

struct Blah
{
  int x, y, z;
};

class X
{
   Blah *arr[10];

   X()
   {
      for(int i = 0; i < 10; i++)
      {
         arr[i] = new Blah;
      }
   }
}

class Y
{
   X var;
};


Y y;

for(int i = 0; i < 10; i++)
{
     y.var.arr[i]->x *= 4; 
     y.var.arr[i]->y *= 3; 
     y.var.arr[i]->z *= 5; 
}

可以写成:

for(int i = 0; i < 10; i++)
{
     Blah &b = y.var.arr[i];

     b.x *= 4; 
     b.y *= 3; 
     b.z *= 5; 
}

现在,这有点容易阅读,不是吗?