У меня есть странная проблема с использованием полиморфизма. У меня есть базовый класс, который реализует статический метод. Этот метод должен быть статическим по разным причинам. Базовый класс также имеет чистый виртуальный метод run()
, который реализуется всеми расширенными классами. Мне нужно иметь возможность вызвать run()
из статического класса.статический метод с полиморфизмом в C++
Проблема, конечно, в том, что статический класс не имеет этого указателя. Этот метод может быть передан в параметре void *. Я пытался придумать умный способ передать в него метод run, но до сих пор ничего не работало. также попытались передать это в него. Проблема заключается в том, что я должен был бы его создать, что требует знания расширенного класса. Это побеждает всю цель полиморфизма.
Любые идеи о том, как это сделать?
Я думаю, вы имеете в виду «статический метод», последний в первом абзаце? – unwind
Ори, вы возражаете против передачи этого «this» статическому методу, потому что «мне нужно было бы его создать», но вы хотите вызвать виртуальный метод 'run'. Вы не можете вызвать виртуальный метод без экземпляра, поэтому вам придется создавать экземпляр класса в любом случае. Статический метод не обязательно должен знать, какой * класс был создан; он просто получает указатель базового класса, как показывает ответ Криса. –