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

标签 c++ printf operator-keyword tchar user-defined

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

CMyClass::operator const TCHAR*() const
{
    // returns text as const TCHAR*
}

我希望能够做类似的事情

CMyClass myClass;
_tprintf(_T("%s"), myClass);

甚至

_tprintf(_T("%s"), CMyClass(value));

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

_tprintf(_T("%s\n"), (const TCHAR*)myClass);
_tprintf(_T("%s\n"), myClass.operator const TCHAR *());

但是,我不想投。如何实现?

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

最佳答案

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

关于c++ - 用户定义的转换运算符作为 printf 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2486713/

相关文章:

c++ - 解析在 XML 中的 C/C++ 头文件中定义的嵌套结构/union

c++ float 组作为默认参数

c - 当我尝试在 C 中将一些 unicode 字符打印为十六进制时,由于某种原因它们都具有相同的值

c++ - 小于重载 C++

c# - 重写 == 运算符。如何与 null 进行比较?

C++ 通用输出运算符重载

c++ - 为要在 1 类中使用的结构成员分配常量值

c++ - 元组列表 C++

matlab - disp(fprintf()) 打印 fprintf 和字符数。为什么?

c - 函数返回 int 但出现奇怪的行为