Есть ли способ написания этого короче без захвата лямбда-переменных?

Я не уверен, что кто-нибудь еще создаст временный файл с более коротким именем, когда он будет использоваться во многих строках кода, например, вам нужно получить доступ к чему-то на глубине нескольких классов и вместо того, чтобы снова и снова связывать операторы доступа к элементам вы просто будете использовать более короткое имя временное. Я пытался сделать что-то вроде следующего:

struct Car
{
struct
{
struct
{
int height, width, depth;
} physicalInfo;
} information;
} objectWithARatherLongName ;

int main()
{
auto lambda1 = [] { return objectWithARatherLongName.information.physicalInfo.height; };

// Create a temporary for a shorter name
auto& dimens = objectWithARatherLongName.information.physicalInfo;

auto lambda2 = [=] { return dimens.height; };
// Have to capture "dimens" because it's a local variable
// And over and over again, the shorter way is preferred.
}

В этом случае автоизмерения — это временное короткое имя, но так как я хочу использовать его в лямбде, мне нужно захватить его, что заставило меня подумать, что я должен просто использовать полное имя, которое является глобальным. Есть ли способ сократить это так, как я описал, но все еще использовать глобальную переменную? Я думал о typedef, который будет работать только с типами, верно? Не с реальными объектами.

1

Решение

Не используйте глобальные переменные, но если вам нужно, вы можете добавить еще одну:

struct Car
{
...
} objectWithARatherLongName ;
auto& dimens = objectWithARatherLongName.information.physicalInfo;

int main() { // ...
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]