Я давно читаю этот сайт, но только что зарегистрировался.Я также использовал поиск, который, казалось, не очень помог.
Вот оно: Поскольку я получаю удовольствие от C ++, я натолкнулся на концепцию «ленивой оценки» в Интернете.Я заинтересован в создании чего-то вроде «ленивого вектора», который определяется с помощью функции, которая принимает N аргументов и первые N векторных элементов.
Однако в настоящее время я столкнулся с этой проблемой.Позвольте мне указать на это:
template<typename T, typename... A>
class llazy
{
public:
llazy(const std::function<T(A...)>& func, A... args) : func(func), vec({args...}), numArgs(sizeof...(args))
{}
const T& operator[](size_t index)
{
unsigned short tmp = 1;
//Here I want to stray from 2 elements to pass to function and make the number at least like 0-4
std::vector<size_t> v;
for (unsigned short i = 0; i < numArgs; i++)
v.emplace_back(vec.size() - tmp++);
//As you can see here, there are no issues(if the vector has enough elements ofc) with these two
unsigned long long i = vec.size() - 2, j = vec.size() - 1;
while (vec.size() < index + 1)
//So how do I pass all the vec[v[0]], vec[v[1]], etc... elements to the "func"?
//Maybe there is another way to achieve this, however, this is the Python which makes me think this is possible
vec.emplace_back(func(vec[i++], vec[j++]));
if (vec.size() >= index + 1)
return vec[index];
}
private:
const unsigned char numArgs;
const std::function<T(A...)> func;
std::vector<T> vec;
};
using ullong = unsigned long long;
int main()
{
llazy<ullong, ullong, ullong> l(std::function<ullong(ullong, ullong)>([](ullong i, ullong j) { return i + j; }), 1, 1);
l[20];
l[50];
l[1000];
return 0;
}
Спасибо за ваши ответы заранее.
UPD: Конечно, вектор может быть передан функции, однако это делает сами функциинамного менее читаемый (например, беззнаковая сумма (без знака, без знака) гораздо более понятна, чем беззнаковая сумма (std :: vector)).