Как я могу применить функции Stati c в шаблоне класса и ссылаться на них - PullRequest
2 голосов
/ 02 апреля 2020

Это своего рода вопрос из двух частей, но я считаю, что они очень тесно связаны.

Вопрос 1:

Я читал по другим вопросам, что есть способы принудительно заставить класс иметь определенные функции stati c, например:

class Type{
   virtual void staticVirtual() = 0;
};

template<typename T>
class StaticContract{
   void staticVirtual(){
       T::foo();
   }
};

Если бы я создал класс, унаследованный от этого контракта:

class Example : public StaticContract<Example>{
   ...
};

Тогда Example будет иметь реализовать функцию stati c foo().

У меня проблема в том, что я создаю шаблонный класс, который наследуется от контракта:

template <Typename T>
class mTemplateClass : 
   public StaticContract<mTemplateClass<T>>{
   ...
}

Не знаю получить какие-либо ошибки за отсутствие реализации foo().

Как заставить шаблон иметь определенные stati c функции, которые я могу вызвать, или это вообще возможно?


Вопрос 2:

Учитывая приведенный выше вопрос, каждый StaticContract содержит статический c экземпляр Registration, который создается с переданным типом (StaticContract<typename T> и будет иметь Registration<T>) :

template <typename T>
class Registration :
    public Registrants
{
public:
    Registration() {
        vectorOfFunctions->push_back(&T::foo);
    }
};

Когда класс, наследующий от StaticContract, не является шаблоном, это работает нормально, но когда В своем шаблоне он никогда не будет sh возвращать экземпляр своей функции, не говоря уже о том, что он даже не обеспечивает его реализацию.

Как я могу sh вернуть эту функцию из самый производный класс?

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