C++ 可变模板和参数重载don';我们不能一起工作

C++ 可变模板和参数重载don';我们不能一起工作,c++,variadic-templates,overloading,C++,Variadic Templates,Overloading,我正在尝试编写一个简单的变量函数,它将能够支持许多不同的类型,但我做错了什么 #include <iostream> using namespace std; void parse(void) {} template<typename... Rest> void parse(bool* pValue, Rest... restArgs) { cout << "bool*\n"; parse(restArgs...); } templa

我正在尝试编写一个简单的变量函数,它将能够支持许多不同的类型,但我做错了什么

#include <iostream>

using namespace std;

void parse(void) {}


template<typename... Rest>
void parse(bool* pValue, Rest... restArgs) {
    cout << "bool*\n";
    parse(restArgs...);
}

template<typename... Rest>
void parse(int* pValue, Rest... restArgs) {
    cout << "int*\n";
    parse(restArgs...);
}

int main() {
    bool a1;
    int a2;
    parse(
        &a1,
        &a2);
}
#包括
使用名称空间std;
void解析(void){}
模板
无效解析(bool*pValue,Rest…restArgs){

cout您只需向前声明另一个重载:

template<typename... Rest>
void parse(int* pValue, Rest... restArgs);

template<typename... Rest>
void parse(bool* pValue, Rest... restArgs) {
  std::cout << "bool*" << std::endl;
  parse(restArgs...);
}

template<typename... Rest>
void parse(int* pValue, Rest... restArgs) {
  std::cout << "int*" << std::endl;
  parse(restArgs...);
}
模板
无效解析(int*pValue,Rest…restArgs);
模板
无效解析(bool*pValue,Rest…restArgs){

std::cout您只需向前声明另一个重载:

template<typename... Rest>
void parse(int* pValue, Rest... restArgs);

template<typename... Rest>
void parse(bool* pValue, Rest... restArgs) {
  std::cout << "bool*" << std::endl;
  parse(restArgs...);
}

template<typename... Rest>
void parse(int* pValue, Rest... restArgs) {
  std::cout << "int*" << std::endl;
  parse(restArgs...);
}
模板
无效解析(int*pValue,Rest…restArgs);
模板
无效解析(bool*pValue,Rest…restArgs){

std::cout Big thank,这是有意义的…我的示例中的错误是,编译器在知道另一个重载更好地满足其要求之前尝试在第一个函数中扩展模板。太好了!Big thank,这是有意义的…我的示例中的错误是,编译器在知道另一个重载之前尝试在第一个函数中扩展模板更符合它的要求。太好了!