我正在尝试使用C ++ 11标准,并提出了这个问题:
在C ++ 11中,您可以使用auto
和decltype
自动获取函数的返回类型,例如下面的begin()
和end()
函数:< / p>
#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()
的调用,并且需要对象的实例。
有解决方法吗?
答案 0 :(得分:6)
您可以完全避免使用decltype
,只需将返回类型设置为std::vector<T>::iterator
。
如果你想使用auto,你可以使用std::declval
从这样的类型中获取一个值:
auto begin() -> decltype(std::declval<std::vector<T>>().begin()) { return v.begin(); };