Inheriting constructor を使って Variadic Templates 対応版 Boost.Fusion vector
そういえば、Inheriting constructor 実装されたし簡単になりそうだよなーってことで書いてみた。
[ソース]
#include <boost/fusion/include/make_vector.hpp> #include <boost/fusion/include/io.hpp> #include <boost/fusion/include/at_c.hpp> #include <iostream> template<typename base> struct inheriting_constructor : base { using base::base; }; template<typename ...args> struct vector : inheriting_constructor< decltype(boost::fusion::make_vector(std::declval<args>()...)) >{ using inheriting_constructor< decltype(boost::fusion::make_vector(std::declval<args>()...)) >::inheriting_constructor; }; int main(){ vector<int, float, char> t{ 42, 3.14f, 'a' }; std::cout << boost::fusion::at_c<1>(t) << std::endl; std::cout << t << std::endl; return 0; }
[出力]
3.14 (42 3.14 a)
[boost]
- ver 1.53.0