Так спасибо this answer Я ищу реализацию моей проблемы с CRTP. Однако у меня есть проблема. В моем статическом базовом классе у меня есть 2 набора функций. Один принимает std :: векторы, а один берет стандартный массив C-style. Поэтому в базовом классе я определяю статическую функцию, которая вызывает функцию non-std :: vector.Любопытно повторяющийся шаблон Шаблон и статика в базовом классе
Однако, когда я получаю этот базовый класс, я, похоже, больше не могу получить доступ к публичной статической функции в базовом классе (что, как я думал, я мог бы).
template< class Derived > class Base
{
public:
static void Func(std::vector<float>& buffer)
{
Func(&buffer.front(), buffer.size());
}
static void Func(float* pBuffer, int size)
{
Derived::Func(pBuffer, size);
}
};
Я тогда определить производный класс следующим образом:
class Derived : public Base<Derived>
{
public:
static void Func(float* pBuffer, int size)
{
// Do stuff
}
};
Однако, когда я пытаюсь вызвать статическую функцию в классе Base:
Derived::Func(stlVec);
Из производного класса он бросает ошибка компиляции:
error C2665: 'main' : none of the 2 overloads could convert all the argument types
1> c:\development\Base.h(706): could be 'void Func(float*, int)
Я предположил, что я могу вызвать публичный статический элемент, определенный в базовом классе из класса Derived. Это, похоже, не так, однако ... Может ли кто-нибудь предложить обходное решение, которое не означает необходимость реализации функции std :: vector в каждом из моих классов Derived?
Ой блин ... Я думал, что это скрыть, только если он принял одни и те же параметры ... что боль :(Можно ли импортировать все функции базовых классов с помощью «с использованием базы < Derived >»? – Goz
@Goz: 'using' declarative приносит * имя * в область действия.Так что вы должны упомянуть о том, что * имя. – Nawaz
И это« нет »в ответ на мой вопрос ... Кажется, боль, чтобы положить этот оператор using для каждой функции, хотя :( – Goz