Параметры шаблона итерации C ++C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Параметры шаблона итерации C ++

Сообщение Anonymous »

Можно заполнить соответствующие регистры виртуальной машины на основе списка аргументов и некоторой логики, используя C ++ 17 -раз /master/lib/libriscv/machine_vmcall.hpp#l35
https://github.com/fwsgonzo/libriscv/bl ... ll.hpp#l18
Структы будут выдвинуты в стек, а адрес займет слот целочисленного регистра. Итак, я могу превратить регулярный вызов функции в вызов в мою виртуальную машину. Я не думаю, что любой другой язык программирования может сделать это. Они выглядят следующими:
https://github.com/fwsgonzo/libriscv/bl ... ls.cpp#l20
В попытке упростить Обработка системных вызовов Я хочу иметь возможность взять список типов аргументов, выполнить некоторую логику на каждом из них (извлеките значения на основе типа), а затем, необязательно, вызовите лямбду с аргументами, которые я создал. Например: < /p>
template
void simplified_systemcall_handler(machine& machine, std::function callback)
{
parameter_pack p;
int i = 0;
foreach (Arg : ) {
if constexpr (std::is_integral_v) {
p.append(machine.get_syscall_arg (i++));
}
}
callback(p);
}
< /code>
Это, конечно, не будет работать, так как вы не можете создавать пакеты параметров, насколько мне известно, ни параметры шаблона итерации, подобные такими параметрами. Тем не менее, псевдокод рассказывает вам, что я хочу сделать. < /P>
Цель состоит в за раз. Итак, что самое лучшее лучшее? Что -то вроде этого: < /p>
auto list = machine.get_syscall_arguments ();
// process list assuming list[0] is int, list[1] is long
< /code>
Число и типы аргументов известны заранее. Значения не известны до тех пор, пока они не будут извлечены из регистров машины.

Подробнее здесь: https://stackoverflow.com/questions/610 ... parameters
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»