奇怪的重复模板模式和基类中的统计信息

时间:2013-08-09 19:49:50

标签: c++ static crtp static-polymorphism

感谢this answer我正在考虑用CRTP实现我的问题。但是我有一个问题。在我的静态基类中,我有两组函数。一个采用std :: vectors,一个采用标准的C风格数组。所以在基类中我定义了一个调用非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 );

从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类调用基类中定义的公共静态。然而,情况似乎并非如此......任何人都可以提出一个解决方法,并不意味着必须在每个Derived类中实现std :: vector函数吗?

1 个答案:

答案 0 :(得分:2)

派生类中的

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

class Derived : public Base< Derived >
{
public:

    using Base<Derived>::Func;

     //rest..
};