decltype需要实例化对象
decltype requires instantiated object
我对C++11标准进行了一些实验,发现了这个问题:
在C++11中,您可以使用auto
和decltype
自动获取函数的返回类型,例如下面的begin()
和end()
函数:
#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()
的调用,并且需要对象的实例。
有办法绕过这个吗?
您可以完全避免使用decltype
,只需将返回类型设置为std::vector<T>::iterator
。
如果你想使用auto,你可以使用std::declval
从如下类型中获取值:
auto begin() -> decltype(std::declval<std::vector<T>>().begin()) { return v.begin(); };
相关文章:
- 对象实例化调用构造函数的次数太多
- 为什么C++无法识别我的对象实例化?
- 使用大括号和 : 符号的对象实例化
- 对象实例化与类型C++
- cpp 静态对象实例化
- 用户创建的类对象实例化的未申请标识符
- 对象实例化后不输出
- 限制对象实例化堆
- 未知的 C++ 对象实例化语法
- 由于命名空间而导致的对象实例化错误
- C 在对象实例化时如何分开声明和构造函数
- JNI Java对象实例化期间的Segfault
- C++ 类文件中的对象实例化
- C++ 中的对象实例化
- 无法理解浮点数和对象实例化之间比较的原因
- C++对象实例化与赋值
- C++:用友元类限制对象实例化
- 将类中的对象实例化数限制为给定数量
- 使用 Sizeof、malloc 和 cast 的 C++ 对象实例化
- 通用成员函数定义,可从 'const' 和 'non-const' 对象实例化