Это своего рода вопрос из двух частей, но я считаю, что они очень тесно связаны.
Вопрос 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 вернуть эту функцию из самый производный класс?