繁体   English   中英

如何指定返回类的 constexpr 函数的类型(不使用 auto 关键字)

[英]How to specify type of a constexpr function returning a class (without resorting to auto keyword)

基本上在下面我想看看我是否可以绕过必须使用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)我不想定义函数外的类。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM