关于c ++:奇怪的重复模板模式和基类中的静态

Curiously Recurring Template Pattern and statics in the base class

因此,多亏了这个答案,我正在考虑用CRTP实现我的问题。但是我有个问题。在静态基类中,我有两组函数。一个采用std::vectors,另一个采用标准的C样式数组。所以在基类中,我定义了一个调用非std::vector函数的静态函数。

然而,当我从该基类派生时,我似乎不再能够访问基类中的公共静态函数(我认为可以)。

1
2
3
4
5
6
7
8
9
10
11
12
13
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 );
    }
};

然后我定义派生类如下:

1
2
3
4
5
6
7
8
class Derived : public Base< Derived >
{
public:
    static void Func( float* pBuffer, int size )
    {
        // Do stuff
    }
};

但是,当我尝试调用基类中的静态函数时:

1
Derived::Func( stlVec );

从派生类引发编译错误:

1
2
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 )

我假设能够从派生类调用在基类中定义的公共静态。然而,情况似乎并非如此……有人能提出一个解决方法,不意味着必须在每个派生类中实现std::vector函数吗?


派生类中的Func隐藏具有相同名称的所有基成员。使用using声明性将基类中的名称带到派生类中。

1
2
3
4
5
6
7
8
class Derived : public Base< Derived >
{
public:

    using Base<Derived>::Func;

     //rest..
};