constructor_caller<int,int,char*>(boxed_data);
template<typename ... CONSTRUCTOR_PARAMETER_TYPES>
static void constructor_caller(BoxedDataType & args) {
T * new_cpp_object = call_constructor_helper<CONSTRUCTOR_PARAMETER_TYPES...>(args,
std::index_sequence_for<CONSTRUCTOR_PARAMETER_TYPES...>());
}
template <typename ...Fs, size_t...ns>
static T * call_constructor_helper(BoxedDataType & args, std::index_sequence<ns...>){
// args contains the boxed parameters and CastToNative unboxes
// the value to a native c++ type
return new T(CastToNative<Fs>()(args[ns])...);
}
У меня есть другое решение, которое включает в себя рекурсивное наследование на основе HEAD, TAIL ... типов параметров, но это даже больше, чем этот пример.Любой способ вызова конструктора (или любой функции/метода) из типов данных без прохождения двух шаблонных функций?
Кроме того, я думаю, чтобы обобщить это на работу для нормальных функций, методов объектов и конструкторов, мне понадобится 3 разных версии этого. Это верно?
Для данного типа 'T' вы вызываете конструктор следующим образом:' T() 'или' T (args) 'или с символами скобок C++ 11,' T {} 'или' T {args } '. Это создает новый объект. Вы также можете вызвать конструктор, объявив переменную типа. –
Вам необходимо как предоставить полный (но минимальный) пример, так и более четкое объяснение того, о чем идет речь. Проголосовал за то, чтобы закрыть как недостающий (соответствующий) пример. –
Хм, думаю, вопрос довольно ясный. Там все в порядке и работает, за исключением BoxedDataType и CastToNative, но фактические типы не так интересны, как просто нужно работать, как в коде, который я поставил в вопросе. Я просто ищу способ не требовать второго вызова, который создает пакет параметров для index_sequence. – xaxxon