В 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
возвращаемое значение явно?
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`
}
}
Других решений пока нет …