-4

基本上在下面我想看看我是否可以绕过不得不使用auto关键字

假设我们有以下代码 [适用于 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;
}

如何在声明/定义时指定类型v而不是使用 auto关键字?我试过create<int>::test v = create<int>();了,但这不起作用。

ps

1)这与我在Returning a class from a constexpr function requires virtual keyword with g++中提出的问题不同,即使代码相同

2)我不想在函数之外定义类。

4

1 回答 1

3

实际类型是隐藏的,因为它在函数内部是本地的,因此您不能显式使用它。decltype但是,您应该能够使用

decltype(create<int>()) v = create<int>();

不过,当工作时,我看不到这样做的理由auto

于 2015-09-27T10:21:18.350 回答