我如何使用这个独特的运算符重载函数
How do i use this unique operator overloaded function
我在使用 sqlapi 时遇到了这个运算符重载,它完全满足我的需要,但我不确定它是如何工作的。
sqlapi.h
class SQLAPI_API SAString
{
public:
//stuff
//! Return pointer to const string
operator const SAChar *() const;
//stuff
}
我知道如何使用它的唯一方法是因为看起来不太漂亮的智能感知:
char* chPointer = SAStringObj.operator const SAChar*();
问题:
是否有更好看的方法来调用这个重载运算符?
有人可以剖析这个函数头告诉我们关于函数的什么吗?
"*operator const SAChar () const;"
这是一个隐式转换运算符,用于将 SAString
转换为 const SAChar *
。每当您在预期 const SAChar *
的上下文中使用 SAString
时,都会隐式调用它(除非它会产生歧义)。
void foo(const SAChar *);
SAString myString("bar");
foo(myString);
const SAChar *myCharPtr = myString;
您可以使用 static_cast
在其他上下文中强制执行它:
static_cast<const SAChar *>(myString)
您可以使用 boost::implicit_cast
即 safer:
boost::implicit_cast<const SAChar *>(myString)
在 C++11 中,你可以有一个 explicit cast operator,它只在 explicit cast contexts 中有效:
explicit operator const SAChar *() const;
最后的const
和普通成员函数一样,具有通常的含义。
我在使用 sqlapi 时遇到了这个运算符重载,它完全满足我的需要,但我不确定它是如何工作的。
sqlapi.h
class SQLAPI_API SAString
{
public:
//stuff
//! Return pointer to const string
operator const SAChar *() const;
//stuff
}
我知道如何使用它的唯一方法是因为看起来不太漂亮的智能感知:
char* chPointer = SAStringObj.operator const SAChar*();
问题:
是否有更好看的方法来调用这个重载运算符?
有人可以剖析这个函数头告诉我们关于函数的什么吗?
"*operator const SAChar () const;"
这是一个隐式转换运算符,用于将 SAString
转换为 const SAChar *
。每当您在预期 const SAChar *
的上下文中使用 SAString
时,都会隐式调用它(除非它会产生歧义)。
void foo(const SAChar *);
SAString myString("bar");
foo(myString);
const SAChar *myCharPtr = myString;
您可以使用 static_cast
在其他上下文中强制执行它:
static_cast<const SAChar *>(myString)
您可以使用 boost::implicit_cast
即 safer:
boost::implicit_cast<const SAChar *>(myString)
在 C++11 中,你可以有一个 explicit cast operator,它只在 explicit cast contexts 中有效:
explicit operator const SAChar *() const;
最后的const
和普通成员函数一样,具有通常的含义。