- The Modern C++ Challenge
- Marius Bancila
- 223字
- 2021-06-25 22:01:27
18. Minimum function with any number of arguments
It is possible to write function templates that can take a variable number of arguments using variadic function templates. For this, we need to implement compile-time recursion (which is actually just calls through a set of overloaded functions). The following snippet shows how the requested function could be implemented:
template <typename T>
T minimum(T const a, T const b) { return a < b ? a : b; }
template <typename T1, typename... T>
T1 minimum(T1 a, T... args)
{
return minimum(a, minimum(args...));
}
int main()
{
auto x = minimum(5, 4, 2, 3);
}
In order to be able to use a user-provided binary comparison function, we need to write another function template. The comparison function must be the first argument because it cannot follow the function parameter pack. On the other hand, this cannot be an overload of the previous minimum function, but a function with a different name. The reason is that the compiler would not be able to differentiate between the template parameter lists <typename T1, typename... T> and <class Compare, typename T1, typename... T>. The changes are minimal and should be easy to follow in this snippet:
template <class Compare, typename T>
T minimumc(Compare comp, T const a, T const b)
{ return comp(a, b) ? a : b; }
template <class Compare, typename T1, typename... T>
T1 minimumc(Compare comp, T1 a, T... args)
{
return minimumc(comp, a, minimumc(comp, args...));
}
int main()
{
auto y = minimumc(std::less<>(), 3, 2, 1, 0);
}
- Bootstrap Site Blueprints Volume II
- Boost C++ Application Development Cookbook(Second Edition)
- MATLAB圖像處理超級學習手冊
- Mastering C# Concurrency
- Learning Firefox OS Application Development
- JavaScript:Moving to ES2015
- Hands-On Automation Testing with Java for Beginners
- Hands-On Natural Language Processing with Python
- Unity UI Cookbook
- 輕松上手2D游戲開發:Unity入門
- Python網絡爬蟲技術與應用
- FFmpeg開發實戰:從零基礎到短視頻上線
- Hadoop大數據分析技術
- Hands-On ROS for Robotics Programming
- Magento 2 Developer's Guide