000
20.06.2005, 10:33 Uhr
Th
|
Ich habe ein Member-Template und möchte es gerne allgemein für das Template std::basic_string<C, T, A> spezialisieren, also in etwa
C++: |
class X {
protected: template<typename T> const void * readBuf( void *_pObj) const { return (*m_FunGet)(_pObj); }
template<> template<typename TChar, typename TTraits, typename TAllocator> const void * readBuf< std::basic_string<TChar, TTraits, TAllocator> >( void *_pObj) const { return ((const std::basic_string<TChar, TTraits, TAllocator> *)((*m_FunGet)(_pObj)))->c_str(); }
private: CFuncBase * m_FunGet; }
|
Bisher habe ich explizite Spezialisierungen für std::string, std::wstring etc. Jedoch wäre es schöner, wenn der Compiler mir die Arbeit abnehmen würde. Obiges liefert mir beim VC7.1 (VS.NET 2003) jedoch die Fehler:
d:\A2dLib V3\Sources\PropertySystem\PropertyHelper.h(190): error C2768: 'NProperty::CMemFunAccessor<TObject,TType>::readBuf' : illegal use of explicit template arguments d:\A2dLib V3\Sources\PropertySystem\PropertyHelper.h(188): error C3856: 'NProperty::CMemFunAccessor<TObject,TType>::readBuf': class is not a class template
Frage: Erlaubt der C++ Standard die Spezialisierung von Templates und wie sieht der Code dann dafür aus? Dieser Post wurde am 20.06.2005 um 10:36 Uhr von Th editiert. |