Skip to content

Instantly share code, notes, and snippets.

@LucianoPAlmeida
Created August 2, 2019 18:52
Show Gist options
  • Save LucianoPAlmeida/4489fa2d27a9aa27baa11aae4cb4c1c1 to your computer and use it in GitHub Desktop.
Save LucianoPAlmeida/4489fa2d27a9aa27baa11aae4cb4c1c1 to your computer and use it in GitHub Desktop.
#include <iostream>
#include <vector>
template <typename T>
T adder(T t) {
return t;
}
template <typename T, typename ... Args>
T adder(T t, Args ... a) {
std::cout << __PRETTY_FUNCTION__ << "\n";
return t + adder(a...);
}
template <typename T, typename ... Is>
bool all_equal(Is ... values) {
std::vector<T> v = { values...};
if (v.size() <= 1) return true;
for (int i = 1; i < v.size(); i++) {
if (v[i] != v[i - 1]) return false;
}
return true;
}
template <typename T>
T map(T t) {
return t;
}
template <typename ... T>
inline void variadic(T ... args) {
auto list = { map(args)... };
for (auto element : list) {
std::cout << element << std::endl;
}
}
template <typename Head, typename... Tail>
void print(Head const& head, Tail const&... tail){
std::cout << head;
if constexpr(sizeof...(tail) > 0) {
std::cout << ", ";
print(tail...);
}
}
template <typename R, typename... T>
R sum(T... args) {
return (args + ...);
}
int main(int argc, const char * argv[]) {
std::cout << "Adder: " << adder(1, 2, 3, 4, 0) << std::endl;
std::cout << "All equal: " << (all_equal<int>(1, 1, 1, 1, 1) ? "true" : "false") << std::endl;
variadic(1, 2, 3, 4, 5);
print(1, 2, 3, 4);
std::cout << std::endl;
std::cout << "Sum: " << sum<double>(3, 1 , 2, static_cast<float>(1.0), 10) << std::endl;
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment