这是一个关于elementsSize()成员函数如何处理自动返回类型推导的问题:
我已经了解到,在不使用decltype的情况下,C++14 可以实现自动返回类型推断的选项。
对我来说,注释掉的
注意:如果在“其他属性”中没有向量,这正是我的实际问题所在,我知道我可以从std::vector继承。
#include <iostream>
#include <vector>
template<typename Element>
class ElementVector
{
std::vector<Element> elementVec_;
// Other attributes.
public:
ElementVector() = default;
ElementVector(const std::initializer_list<Element>& list)
:
elementVec_(list)
{}
auto elementsSize() // -> decltype(elementVec_size())
{
return elementVec_.size();
}
};
using namespace std;
int main(int argc, const char *argv[])
{
ElementVector<double> e = {1.2, 1.3, 1.4, 1.5};
cout << e.elementsSize() << endl;
return 0;
}
上面的代码会导致编译器警告(gcc 4.8.2):
main.cpp:20:27: warning: ‘elementsSize’ function uses ‘auto’ type specifier without trailing return type [enabled by default]
auto elementsSize() // -> decltype(elementVec_size())
我已经了解到,在不使用decltype的情况下,C++14 可以实现自动返回类型推断的选项。
对我来说,注释掉的
decltype
写起来有些奇怪。我做错了什么吗?注意:如果在“其他属性”中没有向量,这正是我的实际问题所在,我知道我可以从std::vector继承。
std::vector
继承,但这可能是一个非常糟糕的想法。 - Shoeauto add(T1 a, T2 b) -> decltype(a+b)
。但是前置返回类型不行。 - Mike Seymour