Я задаюсь вопросом, является ли это каким-то образом можно переписать метод следующим образом:шаблон VARIADIC и перезапись
#include <iostream>
#include <tuple>
template<typename P, typename ...Keys>
class Object {
public:
void method1(P p, Keys... keys) {
method2(std::make_tuple(keys...), p);
}
void method2(const std::tuple<Keys...> my_tuple, int id) {
printf("Hello1!");
}
};
class MyObject : public Object<int, char, char> {
public:
void method2(const std::tuple<int, char> my_tuple, int id) {
printf("Hello2!");
}
};
int main(int argc, char *argv[]) {
MyObject obj;
int a = 13;
obj.method1(a, 'a', 'c'); // prints Hello1! and not Hello2!
}
Этот код печатает «hello1». Я хочу, чтобы он печатал «Hello2».
Если я изменяю method2 в
abstract void method2(const std::tuple<Keys...> my_tuple, int id) = 0;
я получаю следующее сообщение об ошибке:
ошибка: не может объявить переменную 'Obj' быть абстрактного типа 'MyObject' Obj;
main.cpp: 16: 7: note: поскольку в «MyObject» чистые следующие виртуальные функции:
Каков правильный способ перезаписи метода2 в MyObject?
Бест, Moritz
Ошибка, которую вы опубликовали, это функция 'virtual', но ваш код не имеет. –
Как я уже упоминал: «Даже если я изменю метод2 на виртуальную функцию ...». Без виртуальной функции он просто печатает «Hello1». – moo