Как указать тип функции constexpr, возвращающей класс (без обращения к ключевому слову auto)
В основном ниже я хочу посмотреть, смогу ли я обойтись, используя auto
ключевое слово
Предположим, что у нас есть следующий фрагмент кода [работает с g++ 4.9.2 (Ubuntu 4.9.2-10ubuntu13) и clang версии 3.6.0]:
//g++ -std=c++14 test.cpp
//test.cpp
#include <iostream>
using namespace std;
template<typename T>
constexpr auto create() {
class test {
public:
int i;
virtual int get(){
return 123;
}
} r;
return r;
}
auto v = create<int>();
int main(void){
cout<<v.get()<<endl;
}
Как я могу указать тип v
вместо того, чтобы использовать auto
ключевое слово в точке объявления / определения? Я старался create<int>::test v = create<int>();
но это не работает.
п.с.
1) это отличается от вопроса, который я задавал при возврате класса из функции constexpr требует виртуального ключевого слова с g ++, даже если код такой же
2) Я не хочу определять класс вне функции.
1 ответ
Фактический тип скрыт, поскольку он локальный внутри функции, поэтому вы не можете явно использовать его. Однако вы должны быть в состоянии использовать decltype
как в
decltype(create<int>()) v = create<int>();
Я не вижу причины, чтобы сделать так, хотя, когда auto
работает.