C++将地址转换为字符串
生活随笔
收集整理的這篇文章主要介紹了
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 *類型。
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的C++将地址转换为字符串的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PWA将带来新一轮大前端技术洗牌?
- 下一篇: Problem A: 童年生活二三事