Мне нужно избавиться от старого вариационного синтаксиса c ++ 98 и использовать современные вариационные шаблоны и аргументы c ++ 17 для поддержки входных и выходных вызовов (во время выполнения) функций и функций интерпретатора.
Я на самом деле пытаюсь ... проверить его механику:
template<typename C, typename R, typename ...A>
class methodology{
std::string _name;
C* rt_obj = nullptr;
using rt_fn_t = R(C::*)(A...);
rt_fn_t rt_fn = nullptr;
//using out_fn_t = alu(const alu::list_t& params);
public:
// `alu` is a custom std::any wrapper container class:
// Kind of Arithmetic Logical Unit.
// teasing js dangerous style
std::string& name() { return _name; }
// Runtime calling a given "named" function into the interpreter:
R operator()(const A& ...args){
// pack into our alu list:
auto param = [](auto a){
return alu(a);
};
alu::list_t params = { param(args)...};
alu a = interpreter::enter(_name, params);
return a.value<R>();
}
/*
Called from inside the interpreter:
*/
alu operator()(const alu::list_t& params){
// Here is my lack of c++ 17 functional knowledges:
//how to : params => A..args, using this class's typename ...A ???
return (rt_obj->*rt_fn)(args...);
return alu(false); // default. Unimplemented.
}
};
Мои проблемы:
(Пожалуйста, обратитесь к моему заголовочному файлу класса "alu", если вам нужна более подробная информация:
https://github.com/bretzel/xio/blob/master/xio%2B%2B/interpreter/kernel/alu.hpp,, а затем просмотреть фактический старый уродливый синтаксис:
https://github.com/bretzel/xio/blob/master/xio%2B%2B/interpreter/kernel/function_t.hpp)
std::apply(...,std::tuple<>)
кажется, что путь, но:
Как мне построить std::tuple<(methodology<typename...A>)>
из списка "alu
", каждый из которых "alu
" глубоко содержит тип аргумента в своем внутреннем объекте "std::any
"?