如何在C++中通过引用传递模板可变参数?

How to pass template variadic arguments by reference in C++?

提问人:gk2 提问时间:4/29/2022 更新时间:4/29/2022 访问量:162

问:

我想获得重复的输入,因此我制作了函数来获取各种类型的输入。

template <typename InputType>
void get_inputs(const std::string& placeholder, InputType& input){
    std::cout << placeholder << ": ";
    std::cin >> input;
}

template <typename InputType, typename... Args>
void get_inputs(const std::string& placeholder, InputType& input, Args... args){
    get_inputs(placeholder, input);
    get_inputs(args...);
}

int main(int, char**) {
    std::string name;
    int age;
    double height;

    get_inputs(
        "name", name,
        "age", age,
        "height", height
    );

    std::cout << "INFO: " << name << ", " << age << ", " << height << std::endl;

    return 0;
}

如果我输入喜欢(括在方括号中的内容是用户输入)

输入

姓名:[example-name]
年龄:20
身高:173.5

那么结果一定是

输出

信息: example-name, 20, 173.5

但是,结果是

输出

信息:example-name, 1, 2.12785e-314

我注意到只有第一个参数是通过引用传递的,而余数是按值传递的。我认为问题是由没有明确定义的函数引起的。我该如何解决?get_inputs

C++ 模板 参数传递 引用模板 元编程

评论

1赞 Some programmer dude 4/29/2022
Args... args-> Args&... args(或为了完美的转发,连同Args&&... argsget_inputs(std::forward<Args>(args)...))
0赞 Turtlefight 4/29/2022
Args... args按值传递参数 - 您可以改用 Godbolt 示例完美地转发参数Args&&... args
0赞 gk2 4/29/2022
谢谢!我用你的想法解决了问题。

答: 暂无答案