В atlsafe.h есть какой-то странный синтаксис оператора, с которым я не знаком:
operator LPSAFEARRAY() throw() { return m_psa; }
Может кто-нибудь объяснить, как работает эта функция, и привести пример того, как она работает?используемый?Спасибо!
оператор LPSAFEARRAY () - это оператор преобразования типа *1003*, который позволяет автоматически (неявно) преобразовать класс в тип, указанный в операторе (LPSAFEARRAY).
Это оператор преобразования .В конце throw() означает, что функция не будет выдавать никаких исключений.
throw()
Пример:
class String { public: String( const char * str ) : buffer(0) { if ( ( str != 0 ) && ( str[0] != '\0' ) ) { this->buffer = new char[ strlen(str) + 1 ]; strcpy( this->buffer, str ); } }; ~String( void ) { if ( this->buffer != 0 ) { delete [] this->buffer; this->buffer = 0; } }; operator const char * (void) { return this->buffer; }; private: char * buffer; }; String one("1"), two("2"); if ( strcmp(one,two) == 0 ) { // works fine }
Это оператор преобразования. Это позволяет неявно преобразовывать объекты типа CComSafeArray<T> в LPSAFEARRAY.
CComSafeArray<T>
LPSAFEARRAY
CComSafeArray<int> array(10); //Implicitly calls `array.operator LPSAFEARRAY()` to construct a LPSAFEARRAY //from `array` LPSAFEARRAY underlying_array(array);