请允许我说我知道这个问题不符合大多数惯例(如果有的话),但出于对编程语言(C++)的好奇和热爱,我还是会问这个问题。请随时在下面用您的答案或评论纠正我。
问题:
“我们能否在 C++ 中制作可变参数函数来接受多种(可能是以前未知的)数据类型的参数,以及如何实现它?”
例子:
JavaScript 示例
function buildArgs(... args) {
let iterator = 0,
length = args.length;
for (iterator; iterator != length; iterator += 1) {
let arg = args[iterator];
build(arg)
}
}
buildArgs(1); // Valid
buildArgs(1, "Hello"); // Valid
buildArgs(1, "Hello", null) // Valid
(假设的)C++ 示例:
template <class... Args, typename data>
inline void buildArgs(Args... args) {
int iterator = 0,
length = sizeof args;
for (iterator; iterator != length; iterator += 1) {
data arg = args[iterator];
build(arg);
}
}
buildArgs(1); // Valid
buildArgs(1, "Hello"); // Valid
buildArgs(1, "Hello", NULL); // Valid
从给出的示例中,认为对函数有效的参数buildArgs
可以是任何数据类型(char
、等) int
,std::string
而函数buildArgs
可以接受任意数量的有效参数。
我已经对 C++ 中的可变参数函数和模板进行了一些小的研究,但我所看到的还没有回答这个问题。
同样,我不能说这个功能的实用性,但我很想看看它是否可能。
链接:
• C 中具有不同类型参数的可变参数函数: c 中具有不同类型参数的可变参数函数
•接受所有类型作为函数中的参数:接受所有类型作为函数中的参数
• C 编程:https ://en.wikibooks.org/wiki/C_Programming/stdarg.h
• C++ 参考 - 参数包:https ://en.cppreference.com/w/cpp/language/parameter_pack
• C++ 参考 - 折叠表达式:https ://en.cppreference.com/w/cpp/language/fold
• C 中的可变参数数量:C++ 中可变数量的参数?
结论:
感谢您花时间阅读我的问题,更感谢您的回答。