Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
func_t operator+ (const func_t &arg, const func_t &arg2)
{
struct _sum
{
_sum(const func_t &arg, const func_t &arg2)
: _arg(arg), _arg2(arg2){}
double operator()(double x)
{
return (*_arg.f)(x) + (*_arg2.f)(x);
}
const func_t& _arg;
const func_t& _arg2;
};
realfunc realf = _sum(arg, arg2);
return func_t(realf);
}
shared_ptr<realfunc> f;
Угловые скобки съелись.func_chain T1();
T1::func_t f = ...
...
func_t), причём удалятся они только при завершении работы программы. std::vector<> на std::list<>, а в класс добавить счётчик ссылок, чтобы ненужные функции оттуда удалялись, когда они становятся ненужными.Скажем, мы хотим, чтобы некая процедура принимала пару функций A и B и возвращала новое выражение, например, 5A + B. Наша процедура создаст лямбду 5A, затем создаст 5A + B, используя 5А и В. Полученное процедура вернет и завершится, в этот момент лямбда 5А пропадет из области видимости и возвращенное выражение попросту не будет работать.
list<>. Это я провтычил, но ничего от этого не меняется.#include <iostream>
#include <xstddef>
#include <functional>
using namespace std;
typedef tr1::function<double(double)> realfunc;
realfunc go(realfunc &A, realfunc &B)
{
realfunc A5 = [&](double x) {
return A(x) * 5;
};
realfunc A5pB = [&](double x) {
return A5(x) + B(x);
};
return A5pB;
}
int main()
{
realfunc A = [&](double x) {
return x;
};
realfunc B = [&](double x) {
return x;
};
realfunc A5pB = go(A, B);
cout << A5pB(3) << endl;
getchar();
}
#include <cstddef>
#include <functional>
#include <iostream>
using namespace std;
typedef function<double(double)> realfunc;
realfunc go(realfunc A, realfunc B)
{
return [=](double x) {
return A(x) * 5 + B(x);
};
}
int main()
{
realfunc A = [](double x) {
return x;
};
realfunc B = [](double x) {
return x;
};
auto A5pB = go(A, B);
cout << A5pB(3) << endl;
return EXIT_SUCCESS;
}
[=] вместо [&] и всё будет работать.
double f1 (double x) { return cos(5*x + 8); }
Динамические мат. функции в C++