如何在函数内输入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?
}
}
答案 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;
}
现在,这有点容易阅读,不是吗?