статический виртуальный метод в C++ - возможно ли

144
19 января 2019, 17:20

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

при этом для каждого типа нужен будет свои методы

в итоге получается следующий код (упрощённый):

template <class IExtractor>
bool MyFunc(...)
{
   return IExtractor::size();
}

и думал сделать следующим IExtractor универсальным следующим образом

class IBaseExtractor
{
    public:
        static virtual int size() const = 0;
};
class CExtractor1: public IBaseextractor
{
    public:
        static int size() const {return 1;}
};
class CExtractor2: public IBaseextractor
{
    public:
        static int size() const {return 10;}
};
const bool res1 = MyFunc<CExtractor1>();
const bool res1 = MyFunc<CExtractor2>();

Но похоже в C++ виртуальный статический метод сделать нельзя? Или я что-то криво делаю - можно ли как-то это обойти?

P.S.

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

P.P.S.

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

Хотя если бы такое понадобилось, то пришлось бы наверное использовать экземпляр класса как параметр, хотя мне кажется это криво и лучше было бы отойти от этого

READ ALSO
Можно ли из кода C++ вызвать функцию на Swift?

Можно ли из кода C++ вызвать функцию на Swift?

При разработке под iphone на Swifte возникла необходимость вызвать функцию на C++С этой задачей легко справились

156
Как написать чат - бота для telegram на с++?

Как написать чат - бота для telegram на с++?

Я учу с++ и хочу создать своего чат-бота для telegram на с++! Посоветуйте пожалуйста какой нибудь материал на эту темуP

160
Запустить джава файл с помощью с++

Запустить джава файл с помощью с++

Можно ли скомпилированный бинарный java-файл запустить с помощью С++? Без system!

156
Как авторизоваться на чужом сайте через android приложение?

Как авторизоваться на чужом сайте через android приложение?

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

171