Код: Выделить всё
Animal::f1(int)
Код: Выделить всё
Cat
В реальном мире f1() используется как обратный вызов с высокой нагрузкой на процессор.
т.е. f1() всегда вызывается из базового класса Animal, а не из производных классов.
например. животное->f1(что-то), а не собака->f1(что-то)
Из профилирования, вызываю животное->f1 (int) часто бывает очень медленно.
Код: Выделить всё
f1()
Код: Выделить всё
for(Animal* animal : allAnimalInTheWorld){
for(int i : intArraySizeAround1000){
animal->f1(i);
}
}
Мое плохое решение для его улучшения — зарегистрировать обратный вызов как массив, принимающий функцию.< /p>
Вот псевдокод:
Код: Выделить всё
class Animal{
public: virtual void f1(int)=0;
public: std::function f2;
public: template void regg{
f2=[&](const std::vector& v){ ///f1(i); ///f2(vector_of_int);
Каждый производный класс, например Собака,
Код: Выделить всё
Cat
Обходной путь 2 («вывести это» — не работает)
Вот еще одна попытка использования «вывода этого».
Полагаю, это не так. работает, потому что конструктор Animal не знает, что сам Собака пока.
Вот MCVE (богболт).
Код: Выделить всё
#include
#include
class Animal{
public: virtual void f1(int)=0;
public: std::function f2;
///: "deducing this" technique (not work in this case)
public: template void myReg(this Self&& self) {
std::cout
Подробнее здесь: [url]https://stackoverflow.com/questions/79263650/magic-way-to-make-base-e-g-animal-class-know-class-of-its-real-self-derive[/url]