提问人:gk2 提问时间:4/29/2022 更新时间:4/29/2022 访问量:162
如何在C++中通过引用传递模板可变参数?
How to pass template variadic arguments by reference in C++?
问:
我想获得重复的输入,因此我制作了函数来获取各种类型的输入。
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
答: 暂无答案
评论
Args... args
->Args&... args
(或为了完美的转发,连同Args&&... args
get_inputs(std::forward<Args>(args)...)
)Args... args
按值传递参数 - 您可以改用 Godbolt 示例完美地转发参数Args&&... args