Странный синтаксис оператора C ++ в atlsafe.h - PullRequest
0 голосов
/ 03 февраля 2012

В atlsafe.h есть какой-то странный синтаксис оператора, с которым я не знаком:

operator LPSAFEARRAY() throw()
{
    return m_psa; 
}

Может кто-нибудь объяснить, как работает эта функция, и привести пример того, как она работает?используемый?Спасибо!

Ответы [ 3 ]

1 голос
/ 03 февраля 2012

Это оператор преобразования .В конце 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
}
1 голос
/ 03 февраля 2012

Это оператор преобразования. Это позволяет неявно преобразовывать объекты типа CComSafeArray<T> в LPSAFEARRAY.

Пример:

CComSafeArray<int> array(10);
//Implicitly calls `array.operator LPSAFEARRAY()` to construct a LPSAFEARRAY
//from `array`
LPSAFEARRAY underlying_array(array);
...