1

早上好。

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

问题出现了,每当我想将它传递给任何 vararg 函数(例如 sprintf)时,我的编译器都会向我抛出一个错误,指出它无法复制non-trivial type.

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

现在我的问题是:有没有办法让编译器只写变量来传递内部字符字符串?

和例子:

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

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

如果我编写(并调用)任何访问内部流的函数(c_str()如仅具有内存管理功能。

我试过了:

operator char *() {
    return InternalString;
}

但它似乎没有被sprintf.

非常感谢您的关注。

4

3 回答 3

2

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

于 2013-10-08T07:28:22.580 回答
1

在实践中,添加一个类似于 'c_str()' 的成员函数是最好的解决方案,或者您提供一种将类型 'wrapper' 转换为 char* 的方法

于 2013-10-08T07:32:15.350 回答
1

您不能将非 POD 对象作为变量参数函数的参数传递。尝试看看 Boost Format,或者使用 C++11 编写你自己的类型安全 sprintf 函数

于 2013-10-08T07:33:51.463 回答