亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

C ++是否支持編譯時計數器?

C ++是否支持編譯時計數器?

C++
弒天下 2019-08-12 16:03:30
C ++是否支持編譯時計數器?出于內省的目的,有時我想自動為類型或類似的東西分配序列號。不幸的是,模板元編程本質上是一種功能語言,因此缺乏實現這種計數器的全局變量或可修改狀態。或者是嗎?按請求的示例代碼:#include <iostream>int const a = counter_read;counter_inc;counter_inc;counter_inc;counter_inc;counter_inc;int const b = counter_read;int main() {     std::cout << a << ' ' << b << '\n'; // print "0 5"     counter_inc_t();     counter_inc_t();     counter_inc_t();     std::cout << counter_read << '\n'; // print "8"     struct {         counter_inc_t d1;         char x[ counter_read ];         counter_inc_t d2;         char y[ counter_read ];     } ls;     std::cout << sizeof ls.x << ' ' << sizeof ls.y << '\n'; // print "9 10"}
查看完整描述

3 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

我相信MSVC和GCC都支持一個__COUNTER__預處理器令牌,它在其位置上取代了單調遞增的值。


查看完整回答
反對 回復 2019-08-12
?
狐的傳說

TA貢獻1804條經驗 獲得超3個贊

我想在很長一段時間內解決這個問題,并提出了一個非常簡潔的解決方案。至少我應該有一個upvote試試這個。:))

以下庫代碼實現了命名空間級功能。即我成功實施counter_readcounter_inc; 但不是counter_inc_t(由于template函數內部不允許類,因此在函數內部遞增)

template<unsigned int NUM> struct Counter { enum { value = Counter<NUM-1>::value }; };template<> struct Counter<0> { enum { value = 0 }; };#define counter_read Counter<__LINE__>::value#define counter_inc template<> struct Counter<__LINE__> { enum { value = Counter<__LINE__-1>::value + 1}; }

該技術使用模板元編程并利用__LINE__宏。見結果從你的答案代碼。


查看完整回答
反對 回復 2019-08-12
  • 3 回答
  • 0 關注
  • 600 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號