C++將地址轉換為字符串

C++將地址轉換為字符串

有時候在做程序設計的時候,有可能需要做一個類似messageBus的功能,并且需要一個key保證唯一,那么如何實現這個key的唯一呢?大致兩種思路:

  • 使用函數簽名,因為messagebus綁定的是一個函數,并且對應一個topic,但是為了能夠自適應各式各樣的函數,就需要模板和元編程來解決,但是這樣的局限很大,有一些函數我們是無法獲取簽名的(你一定會需要的);
  • 使用函數地址,這種方式是相對最方便的,由于函數地址是唯一的,這樣我們就可以生成唯一的key,但是難就難在如何獲取函數地址,并且轉換成字符串。

案例

class TestMsg
{
public:void test(){std::cout << "test class no const test " << std::endl;}void test1(){std::cout << "test class no const test1" << std::endl;}
};

測試

TestMsg msg;
vector<TestMsg> tests;size_t cnt = 1000000;
tests.resize(cnt);for( size_t i = 0; i < cnt; ++i )
{tests[i] = TestMsg();
}
auto fp = &TestMsg::test;auto start = std::chrono::steady_clock::now();for( size_t i = 0; i < cnt; ++i )
{void* ss = reinterpret_cast<void*>(&fp);std::stringstream ss1;ss1 << ss << &tests[i];std::string name = ss1.str();
}auto end = std::chrono::steady_clock::now();
std::cout << std::chrono::duration<double, std::milli>(end -start).count() << " ms" << std::endl;

主要轉換是通過stringstream這個類,使用它的前提是轉換成void *類型。

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

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

相關文章

Angular 8之升級和新功能摘要

Angular 8之升級和新功能摘要 Angular 8已經到來,并帶來了大量的工作流程和性能改進。就像我們之前發布的幾個版本一樣,讓我們回顧一下Angular 8的新功能,以及如何將Angular 7應用程序升級到Angular 8。 Angular 8中明顯的新功能數量有限,但確實還有一些好東西: Differen…

Linux下查看顯卡PCIE速率x16x8x4及設定

Linux下查看顯卡PCIE速率x16x8x4 由于linux軟件并不是很齊全所以查看顯卡占用PCIE的帶寬并不直觀&#xff0c;所以本文介紹如何查看。 Windows下使用GPU-Z即可查看 Linux 確定當前顯卡型號 lspci | grep NVIDIA返回 02:00.0 3D controller: NVIDIA Corporation GM107M [GeFor…

Deepin安裝最新顯卡RTX2080Ti及CUDA10.1

Deepin安裝最新顯卡RTX2080Ti及CUDA10.1 廢話不多說直接上教程。 本系統為Deepin 15.10.2&#xff0c;是基于debian 9發布的&#xff0c;不排除后續deepin升級為debian 10&#xff0c;就目前來看是和ubuntu 16.04一樣&#xff0c;使用的是debian 9&#xff0c;所以下載安裝包等…

Anaconda安裝Tensorflow環境

Anaconda安裝Tensorflow環境 Anaconda安裝 下載安裝包&#xff0c;請到這個地址下載 安裝 打開終端執行&#xff1a; bash Anaconda3-5.3.1-Linux-x86_64.sh安裝過程全部yes即可。 然后重新啟動。 驗證是否安裝成功 conda --version如果沒有報錯&#xff0c;并且輸出下面內容…

Windows下Qt Creator設置IDE菜單字體樣式

Windows下Qt Creator設置IDE菜單字體樣式 本文為解決以下問題&#xff1a; IDE的菜單字體太小IDE的菜單字體樣式&#xff0c;可以更換為微軟雅黑 創建樣式文件 在Qt Creator目錄下C:\Qt\Qt5.12.2創建 custom-style.css 文件&#xff0c;內容如下&#xff1a; QWidget { fo…

Clonezilla再生龍備份與還原linux系統

文章目錄Clonezilla再生龍備份與還原linux系統簡介功能與要求一、制作再生龍啟動盤1.下載鏡像2.制作啟動盤二、系統分區三、備份系統四、還原系統注意事項Clonezilla再生龍備份與還原linux系統 簡介 再生龍&#xff08;Clonezilla&#xff09;是一個免費的災難恢復、硬盤克隆…

ubuntu Qt Creator不能輸入中文

ubuntu Qt Creator不能輸入中文 解決方式為下面的腳本&#xff0c;如果你的Qt是安裝在根目錄下&#xff0c;那么需要加sudo&#xff0c;如果不是&#xff0c;直接運行即可 sudo bash ChineseInputForQt-v1.1.sh# 或者bash ChineseInputForQt-v1.1.sh腳本內容為&#xff1a; …

修改gitlab數據卷的位置

修改gitlab數據卷的位置 在使用docker安裝gitlab的時候&#xff0c;一開始沒有考慮其他事情&#xff0c;直接在本地創建了一個數據卷就掛載到容器上了&#xff0c;導致后續數據越來越多&#xff0c;想將數據放到其他盤&#xff0c;大致可以這樣操作。 1.停止容器 docker sto…

Angular安裝教程

Angular安裝 安裝node和npm 參考這篇文章安裝 https://blog.csdn.net/wf19930209/article/details/84226365 正式安裝 當然&#xff0c;在安裝 angular/cli 之前需要先把 Node.js 安裝好&#xff0c;請到官方網站下載安裝包 &#xff0c;安裝過程和普通軟件沒有區別。裝好…

Angular之ngx-permissions安裝入門

Angular之ngx-permissions安裝入門 權限幫助您對路線的控制權,通過使用簡單的概念,你來決定誰可以訪問它們。 安裝 安裝這個第三方庫: npm install ngx-permissions --save導入 App Module導入 import {BrowserModule } from @angular/platform-browser; import {NgMo…

Angular之ngx-permissions的常見使用情況

Angular之ngx-permissions的常見使用情況 權限驗證 首先需要請求驗證并通過&#xff0c;然后獲得權限&#xff0c;最后檢查權限。 這種方式需要在Angular 4.3.2 版本以上才會有效工作。 一般來說我們的程序有2個守衛&#xff0c;一個是信息驗證&#xff0c;一個是權限守衛&am…

Angular之ngx-permissions的控制視圖訪問

Angular之ngx-permissions的控制視圖訪問 案例 demo https://stackblitz.com/edit/ngx-permissions-iwexsb Permission指令 Permission模塊將導出指令 ngxPermissionsOnly 和 ngxPermissionsExcept,它能夠根據權限和角色控制元素的顯示/隱藏。 指令屬性 屬性值描述ngxPerm…

網頁滾動條上下滾動固定元素左右不固定之sticky

網頁滾動條上下滾動固定元素左右不固定之sticky 有時候我們需要網頁中某元素在上下滾動時可以固定在某一位置&#xff0c;但是左右不固定&#xff0c;也就是會隨著左右滾動條滾動。那么我們可以通過 sticky 布局來解決。 position: sticky 我們先看看兼容性&#xff1a; 在使…

Angular之ngx-permissions的管理權限

Angular之ngx-permissions的管理權限 介紹 讓我們開始先說說什么是權限?權限是指用戶可以在應用程序中暢通無阻的能力,所以你要考慮你的程序需要那些權限,分別對應那一部分。 注意: 此庫只適用于前端的簡單防護,真正發揮作用的是后端,不僅僅要做好前端驗證,后端更為重…

Timeshift系統備份與還原

Timeshift系統備份與還原 系統備份 一般Linux系統是比較穩定的&#xff0c;但是一旦崩潰就很難恢復&#xff0c;這里介紹 Timeshift系統備份工具。 安裝Timeshift ubuntu 和 linux mint sudo apt-add-repository -y ppa:teejee2008/ppa sudo apt-get update sudo apt-get ins…

Angular之ngx-permissions的角色管理

Angular之ngx-permissions的角色管理 案例 demo https://stackblitz.com/edit/ngx-permissions-role 介紹 通過定義一個角色是一組指定的由特定用戶組的鑒別能力(權限)。因此,例如用戶或匿名的角色和權限不夠。我們可以代表我們作為一組權限的角色應該是能夠執行的用戶角色…

Angular之ngx-permissions的路由使用

Angular之ngx-permissions的路由使用 介紹 現在,你準備開始與控制訪問應用程序的狀態工作。為了限制任何狀態ngx-permission需要依靠 Angular Route 數據屬性,通過permissions間接控制認證配置。 Permissions對象接受以下屬性: 屬性接受值onlyString|Array|Functionexcep…

Angular之jwt令牌身份驗證

Angular之jwt令牌身份驗證 demo https://gitee.com/powersky/jwt 介紹 Json web token (JWT), 是為了在網絡應用環境間傳遞聲明而執行的一種基于JSON的開放標準((RFC 7519).該token被設計為緊湊且安全的,特別適用于分布式站點的單點登錄(SSO)場景。JWT的聲明一般被用來在…

圖片床

僅供存儲圖片

Angular實現dialog對話框封裝

Angular實現dialog對話框封裝 為什么要封裝? 對于Angular Material UI庫中的dialog組件,實在不是很好用,所以打算簡單封裝一下啊。 直接代碼吧。 封裝dialog組件 1.創建一個dialog組件 2.dialog.component.html文件 <ng-template #dialog><!-- 對話框投射內容…