C++ C++;变长参数函数

C++ C++;变长参数函数,c++,C++,我试图编写一个函数,它遍历一个深度可变的XML节点并找到一个值。递归变量函数似乎是一个很好的解决方案,所以我尝试了这个 struct MiniNode { std::string getAttributeString(std::string s) {} MiniNode getChildByKey(std::string s) {} }; static std::string getFromNodeDefault(MiniNode* node, std::string&

我试图编写一个函数,它遍历一个深度可变的XML节点并找到一个值。递归变量函数似乎是一个很好的解决方案,所以我尝试了这个

struct MiniNode {
    std::string getAttributeString(std::string s) {}
    MiniNode getChildByKey(std::string s) {}
};

static std::string getFromNodeDefault(MiniNode* node, std::string& def, std::string& key) {
    try {
        return node->getAttributeString(key);
    } catch (...) {
        return def;
    }
}

static std::string getFromNodeDefault(MiniNode* node, std::string& def, std::string& key, std::string&... args) {
    try {
        return getFromNodeDefault(node->getChildByKey(key), def, args...);
    } catch (...) {
        return def;
    }
}
但是编译器抱怨说

main.cpp:20:91: error: expansion pattern 'Args&' contains no argument packs main.cpp: In function 'std::string getFromNodeDefault(MiniNode*, std::string&, T&)':                                                                                                                                           

main.cpp:22:67: error: 'args' was not declared in this scope                                                                                                                                                                   
      return getFromNodeDefault(node->getChildByKey(key), def, args...);    
我在这里以第二个答案的一部分为例,没有使用模板,因为我知道我的类型


有没有关于我在这里做错了什么的提示?

请尝试以下操作:

static std::string getFromNodeDefault(MiniNode* node, std::string& def,std::string& key) {
    try {
        return node->getAttributeString(key);
    }
    catch (...) {
        return def;
    }
}
template<typename... T>
static std::string getFromNodeDefault(MiniNode* node, std::string& def, 
std::string& key, T&... args) {
    try {
        return getFromNodeDefault(node->getChildByKey(key), def, args...);
    }
    catch (...) {
        return def;
    }
}
static std::string getFromNodeDefault(迷你节点*节点,std::string&def,std::string&key){
试一试{
返回节点->getAttributeString(键);
}
捕获(…){
返回def;
}
}
模板
静态std::string getFromNodeDefault(MiniNode*节点,std::string&def,
std::字符串和键,T&…args){
试一试{
返回getFromNodeDefault(节点->getChildByKey(键)、def、args…);
}
捕获(…){
返回def;
}
}

您需要使用该模板。您可以做的是
static\u assert
确认类型是您所期望的,或者确认类型是您所期望的,将其转换为模板修复了问题。@Justin。我提到了那个问题,不确定它是否重复。我并不完全清楚必须使用模板。你很难编译这个-
std::string&。。。args