c++ - 将一个类传递给 sprintf

标签 c++ printf variadic-functions

早上好。

我有一个类,从技术上讲,它只是一个字符数组的包装器。 它在构造时为字符串分配内存,并在销毁时释放它。这不是问题。

每当我想将它传递给任何可变参数函数(例如 sprintf)时,问题就出现了 我的编译器向我抛出错误,指出它无法复制 非平凡类型

在谷歌搜索后,它告诉我,“普通类型”是任何类型,可以用 memcpy 复制,没有任何构造函数等。

现在我的问题是:有什么方法可以让编译器仅通过写入变量来传递内部 char 字符串吗?

例子:

Wrapper Var("World");
sprintf(Buf, "Hello %s", Var);

在这个调用之后,它应该是“Hello World”。

如果我编写(并调用)任何访问内部流的函数(如 c_str()),它就可以工作,但这并不是该类的目的。 它应该是一个干净的 API,可以像常规 char 字符串一样传递,只是具有内存管理功能。

我试过:

operator char *() {
    return InternalString;
}

但它似乎没有被 sprintf 调用。

非常感谢您的关注。

最佳答案

隐式转换运算符不适用于变量 arg 函数,如 sprintf() ,因为编译器不知道对象需要转换成什么类型​​。所以在这种情况下,您需要使用 c_str()函数(或类似函数),或使用 static_cast<char*>(Var) 显式转换它.

关于c++ - 将一个类传递给 sprintf,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19241592/

相关文章:

c++ - 使用 Unicode C++ 的飞机符号

c++ - 工厂对象与工厂函数

c++ - 在参数化构造函数中使用此指针

c - Fprintf VS _ftprintf

带有数组的php sprintf

c - 没有第一个参数的可变参数 - va_start 属于什么?

c++ - 从 lambda 表达式返回 boolean 值时出错

c++ - 如何在不使用循环的情况下快速打印由指向指针的指针组成的二维字符数组?

c - 如何保证可变参数的类型安全?

C++ 如何在模板中推断 Callable 的类型(参数列表和返回值)