我对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()的调用,需要对象的一个实例。
有办法绕道吗?
发布于 2012-03-18 17:23:05
您完全可以避免使用decltype,只需将返回类型设置为std::vector<T>::iterator即可。
但是,如果您想使用auto,可以使用std::declval从如下类型中获得一个值:
auto begin() -> decltype(std::declval<std::vector<T>>().begin()) { return v.begin(); };https://stackoverflow.com/questions/9760358
复制相似问题