私はバッファに可変個の引数を入れたい、と私は与えられたバッファに値を挿入する<<
演算子オーバーロードされました:可変長引数テンプレート関数が再帰に依存しているので可変長テンプレート関数に引数を固定することは可能ですか?
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; }
を、私の考えはでありバッファを返すベースケースと、(再帰呼び出し後に)最初の引数をバッファに挿入する再帰的なケースを持っています。
私はのようなコードを実行した場合しかし、私は追加することができるように
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);
は、どのように私は、再帰的な場合には、バッファを渡すことができます。
std::vector<uint8_t> buffer;
pack((uint8_t)0xFF, (uint32_t)0x0A, buffer);
hex_dump(buffer);
私はというエラーメッセージが表示されます値が部分的に満たされたバッファに?
は唯一の最後の引数で可変長引数かもしれ? –
最後の引数として – Lefsler