【发布时间】:2013-12-03 15:41:30
【问题描述】:
我写了一个简化版的 STL basic_string 类:
template<typename chrT>
class strT
{
protected:
chrT * m_pcBuf;
size_t m_nLen;
public:
strT( void );
strT( const chrT * pcStr );
strT( const strT<chrT> & rsStr );
virtual ~strT( void );
virtual inline size_t len( void ) const;
virtual int cmp( const strT<chrT> & rsStr ) const;
virtual inline const chrT & operator [] ( size_t nPos ) const;
virtual inline chrT & operator [] ( size_t nPos );
virtual bool & operator == ( const strT<chrT> & rsStr ) const;
virtual bool & operator != ( const strT<chrT> & rsStr ) const;
virtual bool & operator < ( const strT<chrT> & rsStr ) const;
virtual bool & operator > ( const strT<chrT> & rsStr ) const;
virtual bool & operator <= ( const strT<chrT> & rsStr ) const;
virtual bool & operator >= ( const strT<chrT> & rsStr ) const;
virtual inline strT<chrT> & operator = ( const strT<chrT> & rsStr );
virtual inline operator chrT * ( void );
protected:
void _alloc( size_t nLen );
void _realloc( size_t nLen );
public:
static const size_t none;
};
template<typename inchr, typename outchr>
strT<outchr> convert( const strT<inchr> & rsIn );
typedef strT<char> str;
typedef strT<wchar_t> wstr;
目前,如果我想在 char 和 wchar_t 之间进行转换,我可以这样做:
int main( void )
{
str as = "foo";
wstr ws = convert<char, wchar_t>( as );
}
但我希望有一个允许进行此类转换的模板方法,而不是这种功能方法。这很可能是错误的,但这是我想做的:
template<typename chrT>
class strT
{
// ...
public:
template<typename outchr>
virtual strT<outchr> convert( void ) const;
// ...
}
template<typename chrT, typename outchr>
strT<outchr> strT<chrT>::convert<outchr>( void ) const
{
// ...
}
然后:
int main( void )
{
str as = "foo";
wstr ws = as.convert<wchar_t>();
}
请问可以吗?
感谢您的帮助!
PS : 忘了说我不想使用 C++11 的特性。
【问题讨论】:
标签: c++ string templates methods