如何無效能消耗地在C 中實現類似lua的ipairs?

時間 2021-05-31 18:01:24

1樓:鹹蛋

要是為了編碼方便可以先實現tuple的迭代器然後用巨集封裝下for迴圈比較容易實現

#define _for(i, a, b) for(auto i = a; i != b; i++)

可以進一步為_for 加上變參控制實現類似包含預設值的巨集手機不方便碼字 stackoverflow和知乎上可以搜到

2樓:Star.E

雖然解決的問題不太一樣,不過還是提一下。

C++20有Range-based for statements with initializer哦。

Range-based for loop (since C++11)以後可以這樣寫啦!

for(

std::

size_ti=

0;const

auto&x

:foo

())用起來稍微麻煩了一點點,但更通用。

3樓:暮無井見鈴

粗看起來你的 ipairs 弄出乙個範圍,而其每個元素(也就是結構化繫結所分解的東西)是 tuple ,裡面有 pair 的兩個成員的引用。

然而直接對引用型別加 const 限定是無效的。例如若有 using iref = int&; 則 const iref 仍是 int& 。這就導致了給結構化繫結宣告加 const 後行為未改變。

比較簡單的做法是給 ipairs 的引數加乙個 std::as_const ,而不是給前面加 const 限定。

(此處我不確定正確性)比較複雜的做法是自己另寫乙個封裝引用的仿 tuple 型別(可以復用 tuple ),然後特化一下 std::tuple_element ,用間接方式給引用加 const 。

在C語言中,如何安全地使用void ?

Lvcs 靈活接收資料型別,可以試試使用巨集定義而不用函式 舉個例子 判斷兩個數哪個大 define MAX a,b a b a b 使用巨集定義可以靈活接收各種型別的 a b,而使用函式判斷的話就需要事先設定傳入引數的型別了。 劉燦 傳遞指標同時提供區域長度 不用0來標識字串或區域結束 以typd...

如何評價新的cpu效能天梯中3300x在3500x之上?

Hking 3500x 6c6t,3.6 4.1Ghz3300x 4c8t,3.8 4.3Ghz多核效能或許不相上下,3500x或許小勝。單核效能上,3300x主頻更高,而且3300x是乙個完整的ccx核心,3500x是兩個ccx,之間通過IF匯流排通訊有一定延遲 這也是3300x與3100x同頻下...

如何評價公尺西亞在歌手當打之年歌王之戰中實力演唱《再會的彼端》卻被淘汰?

樂樂吃大餅 我是先知道賽過再回看了公尺西亞和周深的兩段演出。公布結果前公尺西亞單純地像個小孩子,雙手捧臉眼睛一眨一眨地好奇地期待著何老師公布結果,她應該是不知道有劇本的。而周深,上場之前就應該知道的,有種少年勇敢赴死的英勇,碰上新褲子彭磊那二傻子,也是夠諷刺了,確定是搖滾不是癲癇?連續看完公尺西亞的...