首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >解密类型需要实例化对象。

解密类型需要实例化对象。
EN

Stack Overflow用户
提问于 2012-03-18 17:12:30
回答 1查看 1.1K关注 0票数 3

我对C++11标准做了一些实验,并提出了这个问题:

在C++11中,您可以使用autodecltype自动获取函数的返回类型,例如,下面的begin()end()函数:

代码语言:javascript
复制
#include <vector>

template <typename T>
class Container {
private:
    std::vector<T> v;
public:
    auto begin() -> decltype(v.begin()) { return v.begin(); };
    auto end() -> decltype(v.end()) { return v.end(); };
};

这里的问题是,我必须在公开声明之前声明私有vector<T> v,这与我的编码风格背道而驰。我想以我的公众成员之后,宣布我所有的私人成员。您必须在函数声明之前声明向量,因为decltype中的表达式是对向量成员函数begin()的调用,需要对象的一个实例。

有办法绕道吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-03-18 17:23:05

您完全可以避免使用decltype,只需将返回类型设置为std::vector<T>::iterator即可。

但是,如果您想使用auto,可以使用std::declval从如下类型中获得一个值:

代码语言:javascript
复制
auto begin() -> decltype(std::declval<std::vector<T>>().begin()) { return v.begin(); };
票数 8
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9760358

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档