Обращаясь к классу, определенному внутри области действия функции

В C ++ 1y возвращаемый тип функции может включать локально определенные типы:

auto foo(void) {
class C {};
return C();
}

Название класса C выходит за рамки тела foo, так что вы можете создавать экземпляры классов, но не указывать их тип:

auto x            = foo(); // Type not given explicitly
decltype(foo()) y = foo(); // Provides no more information than 'auto'

Иногда желательно указать тип явно. То есть полезно написать «тип C, определенный в foo» вместо «того, что возвращает тип foo». Есть ли способ написать тип fooвозвращаемое значение явно?

11

Решение

auto x            = foo(); // Type not given explicitly
decltype(foo()) y = foo(); // Provides no more information than 'auto'

И что? Почему вас волнует, что такое «настоящее» имя типа?

Как сказал в комментарии dyp, вы можете использовать typedef, чтобы дать ему имя, если это заставляет вас чувствовать себя лучше, чем auto:

 using foo_C = decltype(foo());

Иногда желательно указать тип явно. То есть полезно написать «тип C, определенный в foo» вместо «того, что возвращает тип foo». Есть ли способ написать тип возвращаемого значения foo явно?

Нет.

Там нет названия для «область действия функции внутри foo()«так же, как нет названия для этих областей:

void bar()
{
int i=0;
// this scope does not have a name, cannot qualify `i`
{
int i=1;
// this scope does not have a name, cannot qualify either `i`
}
}
5

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

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

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