06b:なぜshlを作る必要があるのか
code:pci.cpp
uint32_t MakeAddress(uint8_t bus, uint8_t device,
uint8_t function, uint8_t reg_addr) {
auto shl = [](uint32_t x, unsigned int bits) {
return x << bits;
};
return shl(1, 31) // enable bit
| shl(bus, 16)
| shl(device, 11)
| shl(function, 8)
| (reg_addr & 0xfcu);
}
ただ何のひねりもなく左シフトするだけだし
(hoge << 1) | (hoge << 2)みたいな感じで括弧が連続するから?と思ったけど、別に大したデメリットではない
それより「左シフトする演算子」で普通に書けるところを「左シフトされた値を返す関数」にしてるから初見でわかりづらい
hoge << 1というのを見たらhogeが左シフトされていることがすぐわかるけど、shl(hoge, 1)というのを見たらまずshlの定義を探して、中身を理解し、出てくるたびに脳内で置き換えなければならない
極端な話、(~((hoge << 2) & 0xffu))とかだったらそりゃラムダ式作ったほうがいいよねとなるけど
ラムダ式の紹介のため?