当前位置: 首页 > news >正文

惠州网站制作维护网站是一个链接的页面结合吗

惠州网站制作维护,网站是一个链接的页面结合吗,合肥网络推广服务,怎么自己做充值网站Godot 4的主要字符串类型为String#xff0c;已经设计得比较完善了#xff0c;但有一个问题#xff0c;格式化这块没怎么考虑。 String中有一个format函数#xff0c;但这个函数只有两个参数#xff0c;这咋用#xff1f; String String::format(const Variant va…Godot 4的主要字符串类型为String已经设计得比较完善了但有一个问题格式化这块没怎么考虑。 String中有一个format函数但这个函数只有两个参数这咋用 String String::format(const Variant values, String placeholder) const {String new_string String(this-ptr());if (values.get_type() Variant::ARRAY) {Array values_arr values;for (int i 0; i values_arr.size(); i) {String i_as_str String::num_int64(i);if (values_arr[i].get_type() Variant::ARRAY) { //Array in Array structure [[name,RobotGuy],[0,godot],[strength,9000.91]]Array value_arr values_arr[i];if (value_arr.size() 2) {Variant v_key value_arr[0];String key v_key;Variant v_val value_arr[1];String val v_val;new_string new_string.replace(placeholder.replace(_, key), val);} else {ERR_PRINT(String(STRING.format Inner Array size ! 2 ).ascii().get_data());}} else { //Array structure [RobotGuy,Logis,rookie]Variant v_val values_arr[i];String val v_val;if (placeholder.find(_) -1) {new_string new_string.replace(placeholder.replace(_, i_as_str), val);} else {new_string new_string.replace_first(placeholder, val);}}}} else if (values.get_type() Variant::DICTIONARY) {Dictionary d values;ListVariant keys;d.get_key_list(keys);for (const Variant key : keys) {new_string new_string.replace(placeholder.replace(_, key), d[key]);}} else {ERR_PRINT(String(Invalid type: use Array or Dictionary.).ascii().get_data());}return new_string; }查找使用例子都是这种效果 一看就懵。哪里有之前用的带%s %d...之类的格式化用得舒服。 动手实现一个 template typename... Args static std::string str_format(const std::string format, Args... args) {auto size_buf std::snprintf(nullptr, 0, format.c_str(), args...) 1;std::unique_ptrchar[] buf(new (std::nothrow) char[size_buf]);if (!buf)return std::string();std::snprintf(buf.get(), size_buf, format.c_str(), args...);return std::string(buf.get(), buf.get() size_buf - 1); }template typename... Args static String str_format(const std::u32string format, Args... args) {auto size_buf std::snprintf(nullptr, 0, TDrString::Convert_u32String_stdString(format).c_str(), args...) 1;std::unique_ptrchar[] buf(new (std::nothrow) char[size_buf]);if (!buf)return String(U);std::string strFormat TDrString::Convert_u32String_stdString(format);std::snprintf(buf.get(), size_buf, strFormat.c_str(), args...);std::string str(buf.get(), buf.get() size_buf - 1);return String(str); }提供std::string与String两种格式化效果。之后使用方式 cofs UERROR str_format(U函数 [%s] 调用失败参数个数不匹配形参 [%d] 个实参 [%d]个, drFunCall.GetHint().c_str(), it-arguments.size(), drFunCall.arguments.size()); 顺便再在网上转下发现fmt库的评价不错。直接拉下来GitHub - fmtlib/fmt: A modern formatting library加入到源码中可以使用 不过fmt的使用方式是{}有点新鲜貌似与C 20兼容那就先用上 fmt::format([{}.Read] 解析数据{}, prefixType, hint.utf8().ptr()); 直接支持中文。 这个过程中发现一个小问题std::string没法直接转成StringString类提供了一堆构造函数但就是没有std::string String(const char *p_str);String(const wchar_t *p_str);String(const char32_t *p_str);String(const char *p_str, int p_clip_to_len);String(const wchar_t *p_str, int p_clip_to_len);String(const char32_t *p_str, int p_clip_to_len);String(const StrRange p_range);顺手增加String与std::string互相转化的逻辑 头文件String(const std::string str);operator std::string();源文件 String::String(const std::string str) {std::wstring_convertstd::codecvt_utf8wchar_t converter;std::wstring formatted_wstring converter.from_bytes(str);copy_from(formatted_wstring.c_str()); } String::operator std::string() {std::string utf8;const char32_t * utf32 ptr();for (char32_t c : utf32) {if (c 0x7F) {utf8.push_back(static_castchar(c));} else if (c 0x7FF) {utf8.push_back(static_castchar((c 6) | 0xC0));utf8.push_back(static_castchar((c 0x3F) | 0x80));} else if (c 0xFFFF) {utf8.push_back(static_castchar((c 12) | 0xE0));utf8.push_back(static_castchar(((c 6) 0x3F) | 0x80));utf8.push_back(static_castchar((c 0x3F) | 0x80));} else if (c 0x10FFFF) {utf8.push_back(static_castchar((c 18) | 0xF0));utf8.push_back(static_castchar(((c 12) 0x3F) | 0x80));utf8.push_back(static_castchar(((c 6) 0x3F) | 0x80));utf8.push_back(static_castchar((c 0x3F) | 0x80));} else {throw std::invalid_argument(Invalid UTF-32 character.);}}return utf8; } 这就方便了许多。 比如要将Variant 转为 std::string直接一路火花带闪电 Variant v; ... std::string str v.operator String().operator std::string(); 其实还有更简单的用法不过在代码提示与自动完成情况下这样写代码更为舒爽。
http://www.hkea.cn/news/14529086/

相关文章:

  • 中国做水产的有什么网站商务网站规划与设计
  • 佛山市住房和建设局网站网络小说写作网站
  • 贵阳花溪建设村镇银行官方网站网站快速优化排名软件
  • phpwind 企业网站桂林人论坛新闻
  • linux网站备份wordpress插件如何应用
  • 网站建设的色彩搭配做刷票的网站
  • 网博士自助建站系统曲靖网站建设0doit
  • 电商网站怎么制作网页制作软件下载
  • 制作网页的的网站分析网站优缺点
  • 触屏网站模板大连建站软件
  • 会展门户网站源码wordpress最新版本
  • 大型网站建设兴田德润实惠留言网站建设的报告
  • 网站建设与网站主机的选择wordpress-5.0.3设置数据库
  • 网络云网站网店怎么开
  • 怎样做平台网站天津 网站设计公司
  • 潍坊站总站人工服务电话北京哪个网站做兼职比较好
  • 小学最好的网站建设wordpress5.2中文版下载
  • 北京网站优化平台网站建设发信息
  • 网站建设需要掌握哪些知识搭建什么网站比较赚钱
  • 织梦做的网站打包在dw修改网站没收录
  • 建设银行 钓鱼网站农产品网站建设方案
  • 江门专业网站建设公司创造自己的网站
  • 椒江网站建设公司张家港建网站的公司
  • 如何设计网站的链接厦门seo关键词排名
  • 济南市住建厅官方网站wordpress 新浪图片
  • 开源网站有哪些深圳微信公众平台
  • 科技网站建设 长沙怎么自己做图片
  • 做商城网站系统腾讯企业邮箱免费注册入口
  • 哈尔滨快速建站合作云虚拟主机可以做视频网站不
  • 工信部 网站 邮箱汉口北做网站