auto как тип, который возвращает функция C++
как заставить это работать?
LazyRepeater.h
#include <string>
auto makeLooper(const std::string& str);
class LazyRepeater {
std::string str;
int pos{ 0 };
public:
LazyRepeater(std::string str);
char operator() ();
};
LazyRepeater.cpp
#include "LazyRepeater.h"
#include <string>
auto makeLooper(const std::string& str){
return LazyRepeater(str);
}
LazyRepeater::LazyRepeater(std::string str){
this->str = str;
}
char LazyRepeater::operator() () {
char ch = this->str[this->pos];
this->pos++;
this->pos %= this->str.length();
return ch;
}
ошибка: "makeLooper": функцию, возвращающую "auto" нельзя использовать, предварительно не определив
Ответы (1 шт):
Все логично. Определение функции, возвращающей auto, должно быть видно в той единице трансляции (.cpp-файл вместе со всеми заинклуженными хедерами), в которой ее вызывают. Потому что все типы должны быть известны во время компиляции, а вместо auto нельзя подставить правильный тип, не видя определения.
Поэтому auto в возвращаемом типе имеет смысл использовать только для функций, которые уже определены в хедере по какой-то причине (потому что они шаблоны, или inline) (или не в хедере а просто в том же .cpp-файле). Переносить функцию в хедер только для того, чтобы auto заработал - странно.
Поэтому в вашем случае проще явно указать возвращаемый тип. (Или подвинуть функцию в хедер, сделав inline.)