早上好。
我有一个类,从技术上讲,它只是一个字符数组的包装器。 它在构造时为字符串分配内存,并在销毁时释放它。这不是问题。
每当我想将它传递给任何可变参数函数(例如 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/