【发布时间】:2013-08-09 19:49:50
【问题描述】:
感谢this answer,我正在考虑用 CRTP 实现我的问题。但是我有一个问题。在我的静态基类中,我有 2 组函数。一个采用 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
}
};
但是,当我尝试在基类中调用静态函数时:
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 )
我假设我能够从派生类调用基类中定义的公共静态。但是,情况似乎并非如此……任何人都可以提出一种解决方法,这并不意味着必须在我的每个派生类中实现 std::vector 函数吗?
【问题讨论】:
标签: c++ static crtp static-polymorphism