C++将地址转换为字符串
生活随笔
收集整理的這篇文章主要介紹了
C++将地址转换为字符串
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
C++將地址轉(zhuǎn)換為字符串
有時(shí)候在做程序設(shè)計(jì)的時(shí)候,有可能需要做一個(gè)類似messageBus的功能,并且需要一個(gè)key保證唯一,那么如何實(shí)現(xiàn)這個(gè)key的唯一呢?大致兩種思路:
- 使用函數(shù)簽名,因?yàn)閙essagebus綁定的是一個(gè)函數(shù),并且對(duì)應(yīng)一個(gè)topic,但是為了能夠自適應(yīng)各式各樣的函數(shù),就需要模板和元編程來解決,但是這樣的局限很大,有一些函數(shù)我們是無法獲取簽名的(你一定會(huì)需要的);
- 使用函數(shù)地址,這種方式是相對(duì)最方便的,由于函數(shù)地址是唯一的,這樣我們就可以生成唯一的key,但是難就難在如何獲取函數(shù)地址,并且轉(zhuǎn)換成字符串。
案例
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;} };測(cè)試
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;主要轉(zhuǎn)換是通過stringstream這個(gè)類,使用它的前提是轉(zhuǎn)換成void *類型。
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎(jiǎng)勵(lì)來咯,堅(jiān)持創(chuàng)作打卡瓜分現(xiàn)金大獎(jiǎng)總結(jié)
以上是生活随笔為你收集整理的C++将地址转换为字符串的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PWA将带来新一轮大前端技术洗牌?
- 下一篇: Qt与QML的枚举绑定(C++枚举)