C++ 字符格式化輸出

文章目錄

  • 一、簡介
  • 二、實現代碼
  • 三、實現效果

一、簡介

這里使用std標準庫簡單實現一個字符格式化輸出,方便后續的使用,它有點類似Qt中的QString操作。

二、實現代碼

FMTString.hpp

#pragma once#include <cmath>
#include <cstdio>
#include <cstdlib>
#include <optional>
#include <random>
#include <type_traits>
#include <sstream>namespace FMT 
{void formatStream(std::stringstream& stream, char const* text) {stream << text;return;}/// <summary>/// 在編譯時檢測某個類型T是否支持通過 operator<< 輸出到流(如std::stringstream)/// </summary>/// <typeparam name="T"></typeparam>template <class T>class IsStreamable {private:template <class TT>static auto test(int)-> decltype(std::declval<std::stringstream&>() << std::declval<TT>(),std::true_type());template <class>static auto test(...)->std::false_type;public:static bool const value = decltype(test<T>(0))::value;};/// <summary>/// 將任意類型的參數通過流操作符 << 轉換為字符串流(std::stringstream)的內容/// </summary>/// <typeparam name="T"></typeparam>template <class T>class ArgToStream {public:static void impl(std::stringstream& stream, T&& arg) {stream << std::forward<T>(arg);}};/// <summary>/// 將格式字符串 text 中的 {} 占位符依次替換為傳入的參數 arg, args...,并將結果寫入 std::stringstream 流中/// </summary>/// <typeparam name="T"></typeparam>/// <typeparam name="...Args"></typeparam>/// <param name="stream"></param>/// <param name="text"></param>/// <param name="arg"></param>/// <param name="...args"></param>template <class T, typename... Args>void formatStream(std::stringstream& stream, char const* text, T&& arg,Args&&... args) {static_assert(IsStreamable<T>::value,"One of the args has no ostream overload!");for (; *text != '\0'; ++text) {if (*text == '{' && *(text + 1) == '}') {ArgToStream<T&&>::impl(stream, std::forward<T>(arg));formatStream(stream, text + 2, std::forward<Args>(args)...);return;}stream << *text;}stream << "\nFormat-Warning: There are " << sizeof...(Args) + 1<< " args unused.";return;}template <class... Args>std::string formatString(char const* text, Args&&... args) {std::stringstream stream;formatStream(stream, text, std::forward<Args>(args)...);return stream.str();}
}

main.cpp

// 標準文件
#include <iostream>
#include <string>#include "FMTString.hpp"int main(int, char** argv)
{std::string msg = FMT::formatString("Hello, {}! You have {} new messages.", "Alice", 5);std::cout << "Output:" << msg << std::endl;system("pause");return 0;
}

三、實現效果

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80858.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80858.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80858.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

python高級特性

json.dumps({a:1,n:2}) #Python 字典類型轉換為 JSON 對象。相當于jsonify data2 json.loads(json_str)#將 JSON 對象轉換為 Python 字典 異步編程&#xff1a;在異步編程中&#xff0c;程序可以啟動一個長時間運行的任務&#xff0c;然后繼續執行其他任務&#xff0c;而無需等…

ubuntu24離線安裝docker

一、確認ubuntu版本 root@dockerserver:/etc/pam.d# lsb_release -a No LSB modules are available. Distributor ID: Ubuntu Description: Ubuntu 24.04.2 LTS Release: 24.04 Codename: noble 根據codename確認。 docker官方網址下載 https://download.docker.com/linux/…

索尼(sony)攝像機格式化后mp4的恢復方法

索尼(sony)的Alpha 7 Ⅳ系列絕對稱的上是索尼的“全畫幅標桿機型”&#xff0c;A7M4配備了3300萬像素的CMOS&#xff0c;以及全新研發的全畫幅背照式Exmor R?CMOS影像傳感器&#xff0c;搭載BIONZ XR?影像處理器&#xff0c;與旗艦微單?Alpha 1如出一轍。下面我們來看看A7M4…

2025最新出版 Microsoft Project由入門到精通(七)

目錄 優化資源——在資源使用狀況視圖中查看資源的負荷情況 在資源圖表中查看資源的負荷情況 優化資源——資源出現沖突時的原因及處理辦法 資源過度分類的處理解決辦法 首先檢查任務工時的合理性并調整 增加資源供給 回到資源工作表中雙擊對應的過度分配資源 替換資…

最短路與拓撲(1)

1、找最長良序字符串 #include<bits/stdc.h> using namespace std; const int N105; int dis[N]; int vis[N]; int edge[N][N]; int n,m; int vnum;void dij(int u, int v) {// 初始化距離數組和訪問標記for(int i0; i<vnum; i) {vis[i] 0;dis[i] edge[u][i];}// D…

降低60.6%碰撞率!復旦大學地平線CorDriver:首次引入「走廊」增強端到端自動駕駛安全性

導讀 復旦大學&地平線新作-CorDriver: 首次通過引入"走廊"作為中間表征&#xff0c;揭開一個新的范式。預測的走廊作為約束條件整合到軌跡優化過程中。通過擴展優化的可微分性&#xff0c;使優化后的軌跡能無縫地在端到端學習框架中訓練&#xff0c;從而提高安全…

CSS flex:1

在 CSS 中&#xff0c;flex: 1 是一個用于彈性布局&#xff08;Flexbox&#xff09;的簡寫屬性&#xff0c;主要用于控制 flex 項目&#xff08;子元素&#xff09;如何分配父容器的剩余空間。以下是其核心作用和用法&#xff1a; 核心作用 等分剩余空間&#xff1a;讓 flex …

1.6 關于static和final的修飾符

一.static static是靜態修飾符&#xff0c;用于修飾類成員&#xff08;變量&#xff0c;方法&#xff0c;代碼塊&#xff09; 被修飾的類成員屬于類&#xff0c;不必生成示例&#xff0c;即可直接調用屬性或者方法。 關于代碼塊&#xff0c;被static修飾的代碼塊是靜態代碼塊…

數據結構—(鏈表,棧,隊列,樹)

本文章寫的比較亂&#xff0c;屬于是縫合怪&#xff0c;很多細節沒處理&#xff0c;顯得粗糙&#xff0c;日后完善&#xff0c;今天趕時間了。 1. 紅黑樹的修復篇章 2. 紅黑樹的代碼理解&#xff08;部分寫道注釋之中了&#xff09; 3. 隊列與棧的代碼 4. 重要是理解物理邏輯&a…

每日Prompt:發光線條解剖圖

提示詞 一幅數字插畫&#xff0c;描繪了一個 [SUBJECT]&#xff0c;其結構由一組發光、干凈且純凈的藍色線條勾勒而成。畫面設定在深色背景之上&#xff0c;以突出 [SUBJECT] 的形態與特征。某個特定部位&#xff0c;如 [PART]&#xff0c;通過紅色光暈加以強調&#xff0c;以…

【時時三省】(C語言基礎)使用字符串處理函數

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省 在C函數庫中提供了一些用來專門處理字符串的函數&#xff0c;使用方便。幾乎所有版本的C語言編譯系統都提供這些函數。下面介紹幾種常用的函數。 ①puts函數 輸出字符串的函數 其一般形式…

構建可信數據空間需要突破技術、規則和生態三大關鍵

構建可信數據空間需要突破技術、規則和生態三大關鍵&#xff1a;技術上要解決"可用不可見"的隱私計算難題&#xff0c;規則上要建立動態確權和跨境流動的治理框架&#xff0c;生態上要形成多方協同的標準體系。他強調&#xff0c;只有實現技術可控、規則可信、生態協…

模板的使用

模板 模板的概念&#xff1a;模板就是建立一個通用的模具&#xff0c;大大提高復用性 c中模板機制分為兩類 函數模板 建立一個通用函數&#xff0c;其函數返回值類型和形參類型可以不具體定制&#xff0c;用一個虛擬的類型來代表 template<typename T> //template 聲…

YOLOv1:開啟實時目標檢測的新篇章

YOLOv1&#xff1a;開啟實時目標檢測的新篇章 在深度學習目標檢測領域&#xff0c;YOLO&#xff08;You Only Look Once&#xff09;系列算法無疑占據著重要地位。其中&#xff0c;YOLOv1作為開山之作&#xff0c;以其獨特的設計理念和高效的檢測速度&#xff0c;為后續的目標…

vim中的查找

在 Vim 中&#xff0c;使用 n 鍵可以按正向&#xff08;向下&#xff09;繼續查找下一個匹配項。若要反向&#xff08;向上&#xff09;查找&#xff0c;可以使用以下方法&#xff1a; 1. 使用 N 鍵反向查找 在查找命令&#xff08;如 /keyword&#xff09;后&#xff0c;按下…

卡爾曼濾波通俗理解

卡爾曼濾波器的目的與意義何在&#xff1f; - 陳不陳的回答 - 知乎 https://www.zhihu.com/question/41351736/answer/3057034500 這是一個比較通俗易懂的例子&#xff0c;讀完之后可以對卡爾曼濾波怎么使用有比較直觀的理解。 &#x1f9e0; 一、卡爾曼濾波是什么&#xff1f;…

對抗帕金森:在疾病陰影下,如何重掌生活主動權?

帕金森病&#xff0c;一種影響全球超 1000 萬人的神經退行性疾病&#xff0c;正無聲地改變著患者的生活軌跡。隨著大腦中多巴胺分泌減少&#xff0c;患者逐漸出現肢體震顫、肌肉僵硬、步態遲緩等癥狀&#xff0c;甚至連扣紐扣、端水杯這類日常動作都變得艱難。更棘手的是&#…

黑馬k8s(五)

1.Namespace 2.Pod run nginx&#xff1a;nginx是pod控制器的名稱&#xff0c;不是pod的名稱 查看pod更高的參數&#xff1a; 啟動一個不存在的鏡像&#xff1a;pod 查看 dev下面的pod&#xff0c;第二個pod處于容器創建的狀態 查看pod的詳情描述&#xff1a; 通過pod的ip&…

推薦算法工程化:ZKmall模板商城的B2C 商城的用戶分層推薦策略

在 B2C 電商競爭激烈的市場環境中&#xff0c;精準推薦已成為提升用戶體驗、促進商品銷售的關鍵。ZKmall 模板商城通過推薦算法工程化手段&#xff0c;深度挖掘用戶數據價值&#xff0c;制定科學的用戶分層推薦策略&#xff0c;實現 “千人千面” 的個性化推薦&#xff0c;幫助…

如何使用 Qwen3 實現 Agentic RAG?

今天&#xff0c;我們將學習如何部署由阿里巴巴最新Qwen 3驅動的Agentic RAG。 這里是我們的工具棧&#xff1a; CrewAI用于代理編排。 Firecrawl用于網絡搜索。 LightningAI的LitServe用于部署。 頂部的視頻展示了這一過程。 圖表顯示了我們的Agentic RAG流程&#xff1…