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函数吗?
派生类中的
1 2 3 4 5 6 7 8 | class Derived : public Base< Derived > { public: using Base<Derived>::Func; //rest.. }; |