gpt4 book ai didi

C++ 和 C arg_list 函数

转载 作者:行者123 更新时间:2023-11-30 01:51:28 28 4
gpt4 key购买 nike

我需要模拟一个库类型,允许将其同时视为 char* 和 std::string。例如这应该被允许:

char c[16];
MyString ms;
...
strcpy(c, ms);
strcpy(c, ms.c_str());

我只能控制库,但不幸的是不能改变这个库的使用。我无法更改 printf 调用,只能更改发送给它的类型!

例如,我可以通过实现来做到这一点:

class MyString : public string {
public:
operator const char*();
};

问题在于:

sprintf(c, "%s", ms);

C 的“arg_list”函数不会使用 char* 转换。

有什么建议吗?

谢谢。

最佳答案

您只能将trivially-copyable POD 传递给...

你可以做

struct wrapper { const char * it; };

wrapper it{"hello"};
printf("%s", it);

但问题是,您无法管理内存。一旦您尝试添加构造函数和析构函数来分配/释放内存,您将面临错误。

错误:无法通过“...”传递不可平凡复制类型“class mystr”的对象

您可以帮助自己:

const char * c_str(const char * it) { return it; }
const char * c_str(const std::string& it) { return it.c_str(); }

const char * cstr = "hello";
std::string cppstr = "world";

printf("%s %s!", c_str(cstr), c_str(cppstr));

或者使用boost::format (或类似 ostream )。并且您应该为 C++ 使用 ostream/format(类型安全)。

关于C++ 和 C arg_list 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26135067/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com