问题
Basically in below I want to see if I can get around having to use auto
keyword
Suppose that we have the following piece of code [works with g++ 4.9.2 (Ubuntu 4.9.2-10ubuntu13) & clang version 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;
}
How can I specify the type of v
rather than using the
auto
keyword at its point of declaration/definition? I tried create<int>::test v = create<int>();
but this does not work.
p.s.
1)this is different from the question that I was asking at Returning a class from a constexpr function requires virtual keyword with g++ even through the code is the same
2)I do not want to define the class outside the function.
回答1:
The actual type is hidden as it's local inside the function, so you can't explicitly use it. You should however be able to use decltype
as in
decltype(create<int>()) v = create<int>();
I fail to see a reason to do like this though, when auto
works.
来源:https://stackoverflow.com/questions/32806835/how-to-specify-type-of-a-constexpr-function-returning-a-class-without-resorting