我想提出一個可變數量的參數爲緩衝區,所以我重載<<
運營商將值插入指定的緩衝區:是否有可能修復可變參數模板函數的參數?
template<typename T, typename... Args>
void pack(T first, Args... args, std::vector<uint8_t> &buffer) {
pack(args ..., buffer);
buffer << first;
}
void pack(std::vector<uint8_t> &buffer) { return; }
由於可變參數模板的功能依賴於遞歸,我的想法是有一個返回緩衝區的基例和一個將第一個參數插入緩衝區(在遞歸調用之後)的遞歸情況。
但是,如果我運行類似的代碼:
std::vector<uint8_t> buffer;
pack((uint8_t)0xFF, (uint32_t)0x0A, buffer);
hex_dump(buffer);
我得到一個錯誤消息說:
In file included from main.cpp:2:0:
./misc.hpp:20:6: note: candidate: template<class T, class ... Args> void pack(T, Args ..., std::vector<unsigned char>&)
void pack(T first, Args... args, std::vector<uint8_t> &buffer);
^~~~
./misc.hpp:20:6: note: template argument deduction/substitution failed:
main.cpp:35:47: note: candidate expects 2 arguments, 3 provided
pack((uint8_t)0xFF, (uint32_t)0x0A, buffer);
如何傳遞緩衝遞歸情況下,這樣我可以追加值部分填充緩衝區?
可能可變參數只能是最後一個參數? –
保留可變參數作爲最後一個參數 – Lefsler