У меня есть базовый класс и производный, и я хочу изменить базовые функции, сохраняя их статичными, поскольку они должны передаваться другим функциям как статические.
Как я могу это сделать?
У меня есть базовый класс и производный, и я хочу изменить базовые функции, сохраняя их статичными, поскольку они должны передаваться другим функциям как статические.
Как я могу это сделать?
Структура ATL обходит ограничение виртуальной статистики, делая базовый класс шаблоном, а затем производные классы передают свой тип класса в качестве параметра шаблона. Затем базовый класс может вызвать статическую статистику по производным классам, например:
template< class DerivedType >
class Base
{
public:
static void DoSomething() { DerivedType::DoSomethingElse(); }
};
class Derived1 : public Base<Derived1>
{
public:
static void DoSomethingElse() { ... }
};
class Derived2 : public Base<Derived2>
{
public:
static void DoSomethingElse() { ... }
};
Это называется Любопытно повторяющийся шаблон шаблона, который можно использовать для реализации статического полиморфизма.
Вы имеете в виду, что вам нужен указатель на статическую функцию (например, передать в качестве аргумента другой функции, которая требует указателя на статическую функцию), но вам нужно получить доступ к этому указателю функции практически? В этом случае используйте виртуальную функцию для получения указателя функции:
typedef void (*function)();
void do_stuff_with_function(function);
struct Base {
virtual ~Base() {}
virtual function get_function() = 0;
};
struct Derived : Base {
function get_function() {return my_function;}
static void my_function();
};
Derived d;
do_stuff_with_function(d.get_function());
статическая функция не может быть виртуальной, поскольку у них нет экземпляра, через который они доступны. Я действительно верю, что вы можете перезаписать их, хотя.
У вас не может быть статических виртуальных функций в С++.
Виртуальные функции обычно полагаются на указатель this
, чтобы определить тип функции, которая будет вызываться во время выполнения.
Статическая функция-член не передает this
, поэтому статические виртуальные функции в С++ не допускаются.
Если я правильно разбираюсь в вопросе ур, тогда вы можете следовать следующему подходу, иначе игнорировать.
имеют статический указатель функции в базовом классе.
в базовом классе имеют статическую функцию (в которой u вызывает функцию с помощью этого статического указателя функции).
в производных классах устанавливается, что статический функционал функции для функции defination u хочет выполнить.. (в базовом классе u может установить указатель на функцию по умолчанию).
У вас не может быть статических виртуальных функций, , потому что нет смысла иметь их.