c++ - 如何在没有可变参数函数的情况下循环函数的参数
解决方案
如果您只想输出参数,可变参数模板函数可以解决问题 - 提供可变参数函数所缺乏的类型安全......
void print() { }
template <typename T, typename ... TT>
void print(T&& t, TT&& ... tt)
{
std::cout << std::forward<T>(t) << ' ';
print(tt...);
}
template <typename F, typename ... TT>
void execute(F f, TT&& ... tt)
{
std::cout << "calling function with arguments: ";
print(std::forward<TT>(tt)...);
std::cout << std::endl;
f(std::forward<TT>(tt)...);
}
如果你允许一点预编译魔法,我们甚至可以包含函数名:
template <typename F, typename ... TT>
void execute_(F f, char const* name, TT&& ... tt)
{
std::cout << "calling function " << name << " with arguments: ";
// ...
}
#define execute(FUNCTION, ...) execute_(FUNCTION, #FUNCTION, ## __VA_ARGS__)
// be aware of GCC extension: ^^
// (catching empty arguments list)
这里的用法示例...
它有点变通方法的味道(当然,您需要另一个函数调用并且 lambdas 可能看起来很难看),但是您可以通过纯 C++ 手段获得结果,并且没有丑陋的技巧(也许除了宏之外)。
推荐阅读
- reactjs - React 组件库具有两个不同的设计系统和样式组件
- html - How to prevent copy and paste
- docker - Run Xvfb and bin/bash in Dockerfile
- postgresql - How to use timescale hypertables with foreign keys and keep a one-to-many relation?
- web-scraping - 使用 scrapy 进行网页抓取 - 如何解释设置
- r - 将列分成两列:某个单词之前和之后
- android - android:attr/fontStyle 未找到
- google-analytics - Google Analytics 搜索和替换过滤器只取出第一个找到的匹配项
- java - 将媒体上传到 S3 - Android
- c++ - 使用命令行参数更新在后台运行的脚本