В основном ниже я хочу посмотреть, смогу ли я обойтись, используя 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) я делаю не хочу определить класс вне функции.
Фактический тип скрыт, поскольку он локальный внутри функции, поэтому вы не можете явно использовать его. Однако вы должны быть в состоянии использовать decltype
как в
decltype(create<int>()) v = create<int>();
Я не вижу причины, чтобы сделать так, хотя, когда auto
работает.
Других решений пока нет …