Подтвердить что ты не робот

Статические виртуальные функции в С++

У меня есть базовый класс и производный, и я хочу изменить базовые функции, сохраняя их статичными, поскольку они должны передаваться другим функциям как статические.

Как я могу это сделать?

4b9b3361

Ответ 1

Структура 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() { ... }
};

Это называется Любопытно повторяющийся шаблон шаблона, который можно использовать для реализации статического полиморфизма.

Ответ 2

Вы имеете в виду, что вам нужен указатель на статическую функцию (например, передать в качестве аргумента другой функции, которая требует указателя на статическую функцию), но вам нужно получить доступ к этому указателю функции практически? В этом случае используйте виртуальную функцию для получения указателя функции:

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());

Ответ 3

статическая функция не может быть виртуальной, поскольку у них нет экземпляра, через который они доступны. Я действительно верю, что вы можете перезаписать их, хотя.

Ответ 4

У вас не может быть статических виртуальных функций в С++.

Ответ 5

Виртуальные функции обычно полагаются на указатель this, чтобы определить тип функции, которая будет вызываться во время выполнения.

Статическая функция-член не передает this, поэтому статические виртуальные функции в С++ не допускаются.

Ответ 6

Если я правильно разбираюсь в вопросе ур, тогда вы можете следовать следующему подходу, иначе игнорировать.

имеют статический указатель функции в базовом классе.

в базовом классе имеют статическую функцию (в которой u вызывает функцию с помощью этого статического указателя функции).

в производных классах устанавливается, что статический функционал функции для функции defination u хочет выполнить.. (в базовом классе u может установить указатель на функцию по умолчанию).

Ответ 7

У вас не может быть статических виртуальных функций, , потому что нет смысла иметь их.