用户定义的转换运算符作为printf的参数

BC.*_*BC. 3 c++ printf tchar user-defined operator-keyword

我有一个类为TCHAR*定义了一个用户定义的运算符,就像这样

CMyClass::operator const TCHAR*() const
{
    // returns text as const TCHAR*
}
Run Code Online (Sandbox Code Playgroud)

我希望能够做类似的事情

CMyClass myClass;
_tprintf(_T("%s"), myClass);
Run Code Online (Sandbox Code Playgroud)

甚至

_tprintf(_T("%s"), CMyClass(value));
Run Code Online (Sandbox Code Playgroud)

但是在尝试时,printf总是打印(null)而不是值.我也尝试了一个普通的char*运算符,以及const等变量.它只有在我明确调用运算符或执行转换时才能正常工作

_tprintf(_T("%s\n"), (const TCHAR*)myClass);
_tprintf(_T("%s\n"), myClass.operator const TCHAR *());
Run Code Online (Sandbox Code Playgroud)

但是,我不想演员.怎么能实现这一目标?

注意,一种可能性是创建一个具有const TCHAR*参数的函数,以便它强制调用运算符TCHAR*,但这也是我不想实现的.

小智 9

C++标准说像这样的隐式转换不适用于省略号参数 - 编译器如何知道要应用的转换?您必须自己明确执行转换,或者更好地停止使用printf.

  • 我宁愿停止使用转换运算符. (3认同)