【发布时间】:2015-12-24 17:47:46
【问题描述】:
基本上在下面我想看看我是否可以避免使用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>();,但这不起作用。
附言
1)这与我在Returning a class from a constexpr function requires virtual keyword with g++ 提出的问题不同,即使代码相同
2)我确实不想在函数之外定义类。
【问题讨论】:
-
您将您的类设为函数本地,然后询问如何从函数外部访问它。即使你可以(在这种情况下你可以),这个问题也不是一个有意义的问题。如果您希望您的类可以从函数外部访问,则不应将其设为函数本地...
-
@hvd :
If you want your class to be accessible from outside the function它显然已经在函数外访问。 -
鉴于我特意附上了一个注释,我不明白你为什么觉得有必要提醒我,我显然已经意识到这一点。该句子中的相关部分是您引用的部分:所以不要让它成为函数本地的。你没有在你的问题中给出任何理由为什么你想保持它是函数本地的,只有你想要的 那个。
-
@hvd
You don't give any reason in your question why you would want to keep it function-local, only that you want to:基本上我试图模仿标准 ml 仿函数在 c++ 中的工作方式。您可以通过模板参数指定所有内容,但最终您最终会拥有太多模板参数。我正在尝试使用constexpr函数将一个模板类转换 到另一个模板类,这使我可以减少生成类所需的模板参数的数量。有关 SML 函子,请参阅 jozefg.bitbucket.org/posts/2015-01-08-modules.html -
@hvd :因此我必须在
constexpr函数中定义类inside。如果我在constexpr函数之外定义模板函数,我将不得不指定额外的模板参数,这是我试图避免的。
标签: c++ c++14 constexpr clang++ g++4.9