1

如何在函数中键入def?让我们考虑 B 类有一个 int x 数据成员。当我尝试编译以下内容时,我得到: '.' 之前的预期初始化程序 令牌

在这个例子中,一切都很简单,但是对于我的代码,我将执行类似 test.xyzf 的操作,所以我在对象中有多个对象,直到我得到我需要的数据成员,所以 typedef 会有所帮助。

class A
{
  B test;

  A(B test1)
  { 
    test = test1;
  }

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

  }
}
4

4 回答 4

4

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

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

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

void f()
{
    auto& x_ref(test.x); // Or explictly state the type.
}
于 2013-03-05T16:49:16.123 回答
1

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

于 2013-03-05T16:51:32.320 回答
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.
于 2013-03-05T16:52:03.993 回答
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; 
}

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

于 2013-03-05T16:55:22.463 回答