奇怪的C++ atlsafe.h 中的运算符语法

发布于 2025-01-02 10:00:23 字数 245 浏览 1 评论 0原文

atlsafe.h 中有一些我不熟悉的奇怪的运算符语法:

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

有人能解释一下这个函数是如何工作的,并提供一个如何使用它的例子吗?谢谢!

In atlsafe.h there is some strange operator syntax I am not familiar with:

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

Could someone please explain how this function works and provide an example of how it is used? Thanks!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

〃安静 2025-01-09 10:00:23

运算符 LPSAFEARRAY() 是一个 类型转换运算符,允许类自动(隐式)转换为运算符中命名的类型 (LPSAFEARRAY)。

operator LPSAFEARRAY() is a type conversion operator that allows a class to be automatically (implicitly) converted to the type named in the operator (LPSAFEARRAY).

路弥 2025-01-09 10:00:23

这是一个转换运算符。最后 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
}

This is a conversion operator. At the end throw() means that the function won't throw any exception.

An example:

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
}
无声无音无过去 2025-01-09 10:00:23

这是一个转换运算符。它允许将 CComSafeArray 类型的对象隐式转换为 LPSAFEARRAY

例子:

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

This is a conversion operator. It allows objects of type CComSafeArray<T> to be implicitly converted to LPSAFEARRAY.

Example:

CComSafeArray<int> array(10);
//Implicitly calls `array.operator LPSAFEARRAY()` to construct a LPSAFEARRAY
//from `array`
LPSAFEARRAY underlying_array(array);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文