Я пытаюсь написать кусок кода, который будет делать следующее: предположим, у нас есть вызов пользовательской функции связывания
auto bind_obj = bind(some_func, _1, "test")
и после того, как мы
auto res = bind_obj(42)
где функция some_func:
int some_func(int val, string test)
Как можно сопоставить заполнители с аргументами, указанными в реальном вызове функции, то есть bind_obj (…) ??
Другими словами, возможно ли выполнить итерации по std :: tuple (аргументы и заполнители здесь) и пакету переменных (аргументы функции) для:
Я пытаюсь сделать это, не используя boost и std :: функционал. Я думаю, моя главная проблема заключается в том, что я не понимаю, как создать кортеж во время выполнения с аргументами (где все заполнители заменены правильно) и как определить тип возвращаемого значения.
Я видел структуру шаблона _Mu в STL «functions.h», но она выглядит слишком сложной и перегруженной.
Поскольку список аргументов вызова и список захваченных аргументов имеют разный размер, вы не будете по-настоящему перебирать их. Вместо этого вы получите оценку функции, которая ведет себя в соответствии с тем, как были получены аргументы:
Предположим, что ваш связанный объект содержит std::tuple<B...>
связанных аргументов называется b
тогда вы могли бы построить std::tuple<...>
аргументов вызова примерно так:
template <typename... A, std::size_t... I>
... bound::call(std::tuple<A...>&& aux, index_list<I...>) {
auto args = std::make_tuple(get_argument<I>(this->b, a));
// ...
}
template <typename... A>
... bound::operator()(A&&... args) {
return this->call(std::tie(std::forward<A>(args)..., make_index_list<sizeof...A>());
}
Этот фрагмент кода просто показывает, как получить согласованные аргументы. Настоящая работа происходит в get_argument<I>(b, a)
функции, которые woild просто возвращают элемент a
указывается значением заполнителя, если элемент по индексу I
в b
бывает заполнителем.
Код не содержит сведений о том, как создать список индексов, как определить тип возвращаемого значения после сортировки вызова или как обращаться с аргументами rvalue …