Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using std::cout;
- using std::endl;
- template <int... Args>
- struct StaticArray
- {
- static const unsigned int size = sizeof...(Args);
- int array[sizeof...(Args)] = {Args...};
- };
- template <class C, class... Args>
- C * make_new(Args&&... args)
- {
- return new C(std::forward<Args>(args)...);
- }
- template<typename T> T sum(const T& t) { return t; }
- template<typename T, typename... Args> T sum(const T& val, const Args&... rest)
- {
- return val + sum(rest...);
- }
- template <class... Ts>
- size_t sizeofSum()
- {
- size_t sum = 0;
- for(size_t s : {sizeof(Ts)...})
- sum += s;
- return sum;
- }
- template<int x> struct T {
- static const int var = x;
- };
- template<typename... Args> bool staticMemberAllEqualTo(int value)
- {
- bool ret = true;
- using Expand = int[];
- (void)Expand{0, (void(Args::var == value ? 0 : (ret = false)), 0)...};
- return ret;
- }
- // c++17 way
- //template <class... Is> bool checkAllArgs(Is... args) {
- // return ((args == 5) && ...);
- //}
- template<typename... Args>
- void setStaticMembersTo(int x)
- {
- [](...){}((Args::var = x)...);
- }
- int main()
- {
- StaticArray<1, 2, 3, 4> t;
- int * ptr = make_new<int>(123);
- cout << sum(1, 2, 3, 4) << endl;
- cout << sizeofSum<double, int, short, char>() << endl;
- cout << staticMemberAllEqualTo< T<5>, T<5>, T<5> >(5) << endl;
- //cout << checkAllArgs(5, 5, 5) << endl;
- delete ptr;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment