Любопытно повторяющийся шаблон выкройки и статики в базовом классе

Так что спасибо этот ответ Я смотрю на реализацию моей проблемы с CRTP. Однако у меня есть проблема. В моем статическом базовом классе у меня есть 2 набора функций. Один принимает std :: vectors, а второй — стандартный массив в стиле C. Поэтому в базовом классе я определяю статическую функцию, которая вызывает функцию 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
}
};

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

Derived::Func( stlVec );

Из класса Derived он выдает ошибку компиляции:

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 в каждом из моих производных классов?

1

Решение

Func в производном классе шкуры все члены базы с так же название. использование using декларативный, чтобы привести имена из базового класса в производный класс.

class Derived : public Base< Derived >
{
public:

using Base<Derived>::Func;

//rest..
};
2

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]