Run Code
|
API
|
Code Wall
|
Misc
|
Feedback
|
Login
|
Theme
|
Privacy
|
Patreon
Unpacking tuple
#include <tuple> #include <cassert> #include <utility> #include <iostream> #include <vector> struct SomeClass { SomeClass (int a, int b, std::vector<int> &&v) { std::vector<int> localV(std::move(v)); assert (a == 7); assert (b == 42); } }; template <class Base> struct Proxy : Base { template <class... T1> Proxy (std::tuple<T1...>/*&&*/ params): // && - накладывает ограничение на передачу только rvalue. Уберем его. /*Необходимо достать данные из tuple и передать параметры по одному в конструктор базы*/ Proxy(std::move(params), std::make_index_sequence<sizeof...(T1)>()) { } private: template <typename Tuple, size_t...SI> Proxy(Tuple &¶ms, const std::index_sequence<SI...>&): Base(std::move(std::get<SI>(std::forward<Tuple>(params)))...) // std::forward нужен, чтобы использовалась правильная перегрузка std::get {} }; int main () { { // rvalue { // move std::vector<int> v = {1,2,3,4,5}; Proxy<SomeClass> (std::forward_as_tuple(7, 42, v)); assert(v.empty()); } { // copy std::vector<int> v = {1,2,3,4,5}; Proxy<SomeClass> (std::make_tuple(7, 42, v)); assert(v.size() == 5); } } { // lvalue std::vector<int> v = {1,2,3,4,5}; auto t = std::make_tuple(7, 42, v); Proxy<SomeClass> P(t); assert(v.size() == 5); } std::cout << "Ok!\n"; return 0; }
run
|
edit
|
history
|
help
0
Specialization on signed types
7
Random values and probability distribution
Peregruzka
Throttle Example in C++
Template Meta Programming
Tree Traversal and Node
applidiumResto_NicolasCarre
Deleted special operations are propagated to derived class
regimeketopdf