C++ 是否可以将参数固定到可变模板函数?

C++ 是否可以将参数固定到可变模板函数?,c++,recursion,C++,Recursion,我想在缓冲区中放入数量可变的参数,因此我重载了更简单的方法是在第一个参数处使用缓冲区: void pack(std::vector<uint8_t> &) {} template<typename T, typename... Args> void pack(std::vector<uint8_t> &buffer, T first, Args... args) { buffer << first; pack(bu

我想在缓冲区中放入数量可变的参数,因此我重载了
更简单的方法是在第一个参数处使用缓冲区:

void pack(std::vector<uint8_t> &) {}

template<typename T, typename... Args>
void pack(std::vector<uint8_t> &buffer, T first, Args... args) {
    buffer << first;
    pack(buffer, args ...);
}
void pack(std::vector&){
模板
空包(标准::向量和缓冲区,T优先,Args…Args){

buffer更简单的方法是在第一个参数处使用缓冲区:

void pack(std::vector<uint8_t> &) {}

template<typename T, typename... Args>
void pack(std::vector<uint8_t> &buffer, T first, Args... args) {
    buffer << first;
    pack(buffer, args ...);
}
void pack(std::vector&){
模板
空包(标准::向量和缓冲区,T优先,Args…Args){

缓冲区可能是可变的仅为最后一个参数?将可变的保留为最后一个参数可能是可变的仅为最后一个参数?将可变的保留为最后一个参数谢谢,但是,您的解决方案给出了错误“/tmp/ccNl3d0x.o:In function
main”:main.cpp:(.text+0x267):对
void pack的未定义引用(std::vector&,unsigned char,unsigned int)“collect2:error:ld返回了1个退出状态”。知道吗?您在cpp中的何处定义了模板(而不是使用模板的地方)?我已经在一个.hpp文件中声明了模板,但在一个.cpp文件中定义了模板-这是否正确?如果我将模板定义放入main.cpp文件中,我看到它是可行的-但我不想在每个文件中定义,在哪里使用此模板?请查看。谢谢,但是,您的解决方案会给出错误“/tmp/ccNl3d0x.o:In function
main”:main.cpp:(.text+0x267):未定义对
void pack(std::vector&,unsigned char,unsigned int)的引用“collect2:error:ld返回了1个退出状态”。知道吗?您在哪里定义了模板?在cpp中(不是您使用它的地方)?我已经在一个.hpp文件中声明了模板,但在一个.cpp文件中定义了模板-这不对吗?如果我将模板定义放到main.cpp文件中,我看到它是可行的-但我不想在每个文件中定义,在哪里使用此模板?请参阅。
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);
void pack(std::vector<uint8_t> &) {}

template<typename T, typename... Args>
void pack(std::vector<uint8_t> &buffer, T first, Args... args) {
    buffer << first;
    pack(buffer, args ...);
}
template<typename T, typename... Args>
void pack(std::vector<uint8_t> &buffer, Args... args) {
    (buffer << ... << args);
}