Это вопрос о том, что делать для функции-члена elementsSize () относительно автоматического вывода типа возвращаемого значения:
#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())
Я читал о возможности автоматического определения типа возвращаемого значения для C ++ 14 без использования decltype.
Написание закомментированного decltype
мне почему-то кажется странным. Что я делаю неправильно?
Примечание: я знаю, что могу унаследовать от std :: vector, если среди «Других атрибутов» нет вектора, что в точности соответствует моей реальной проблеме.
std::vector
- наверное, это очень плохая идея. - person Shoe   schedule 21.01.2014decltype
или иначе). Если и когда у вас есть компилятор, поддерживающий дедукцию (который, как вы говорите, должен стать стандартом позже в этом году), вы можете его опустить. - person Mike Seymour   schedule 21.01.2014size_t
. - person Mike Seymour   schedule 21.01.2014auto add(T1 a, T2 b) -> decltype(a+b)
. Ведущие возвращаемые типы не могут. - person Mike Seymour   schedule 21.01.2014std::vector
не объявленvirtual
. Вы знаете, что это значит? - person Shoe   schedule 21.01.2014