Back
Syntax
Study
Editor
Mode:
HTML
CSS
JavaScript
PHP
Reset
Run ยป
HTML / CSS / JS
#include <iostream> #include <string> #include <tuple> // C++17 fold expression: sum any number of values template<typename... Args> auto sum(Args&&... args) { return (args + ...); // fold over + } // Variadic print using fold over comma operator template<typename... Args> void printAll(Args&&... args) { ((std::cout << args << " "), ...); std::cout << " "; } // Recursive variadic: count arguments template<typename... Args> constexpr std::size_t countArgs(Args&&...) { return sizeof...(Args); } // Perfect-forwarding factory template<typename T, typename... Args> T* createRaw(Args&&... args) { return new T(std::forward<Args>(args)...); } struct Point { Point(double x, double y, double z) : x(x), y(y), z(z) {} double x, y, z; void print() const { std::cout << "Point(" << x << "," << y << "," << z << ") "; } }; int main() { std::cout << sum(1, 2, 3, 4, 5) << " "; // 15 std::cout << sum(1.5, 2.5, 3.0) << " "; // 7.0 printAll("Hello", 42, 3.14, std::string("world")); std::cout << countArgs(1,'a',"hi",3.14) << " "; // 4 Point* p = createRaw<Point>(1.0, 2.0, 3.0); p->print(); delete p; // std::tuple uses variadic templates internally auto t = std::make_tuple(1, std::string("hi"), 3.14); std::cout << std::get<0>(t) << " " << std::get<1>(t) << " "; return 0; }
Result
Open