tuple_for

tupleの要素を順に処理したい場合に、どうするのが簡単なのか悩ましい。 メモ書き。ろくにテストしてないです。 #include <tuple> #include <type_traits> #include <utility> template <int L, int R, int S, std::size_t... Indices> constexpr auto tuple_for_impl() { if constexpr (L + sizeof...(Indices) >= R) { return [&](auto</int></utility></type_traits></tuple>…

tuple_element再考

using type_impl<Indices, Types>::value...;がミソ。 [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ #include <type_traits> #include <utility> extern void* enabler; template <typename T> struct identity { using type = T; }; template <std::size_t N, typename T> struct type_impl { template </std::size_t></typename></utility></type_traits></indices,>

書き初め

constexpr lambdaが使えるってことは?ということで思いついたネタを。 とりあえずclangさんでは動いてしまった。gccさんは置いてけぼりです。 wandbox.org proof of conceptなので、必要なオーバーロード全然なかったり勝手にconstついたりする気がするので…

入れ子にすればN^2個に展開

#include <iostream> template <typename... Ts> int f(Ts... i) { int k = 0; #pragma GCC diagnostic push #pragma GCC diagnostic ignored "-Wunused-value" (... , (i, (... , (++k, i)))); #pragma GCC diagnostic pop return k; } int main() { std::cout << f(0) << std::endl; </typename...></iostream>…

Folding-expressionを用いてparameter pack長のindex_sequenceを構築する

再帰深度がO(1)に抑えられる.(趣味) melpon.org #include <type_traits> template <int... Ns> struct V; template <int N, int... Ns> struct V<N, Ns...> { template <int M> V<N + 1, N, Ns...> operator +(V<M>); }; template <> struct V<> { template <int M> V<0> operator +(V<M>); }; template <typename... Types> struct S { …</typename...></m></int></m></n></int></n,></int></int...></type_traits>

Traktor + Max/Jitterで楽曲に合わせた映像のポン出しを自動化する

要約 [背景] クラブでは楽曲に合わせてVJさんが映像を出してくれる [目的] 一人でおうちDJをする際にもアニソンにはOP動画やミュージッククリップといった映像を出したい [提案] Traktorのbroadcast経由で楽曲情報を持ってきてMax/Jitterで映像を出す [結論]…

coutで多次元配列のdump

何かの役に立つかも 実行結果 http://melpon.org/wandbox/permlink/MJN1EGWMw1ixnvBJ #include <iostream> template <typename T, std::size_t N> std::ostream& operator<< (std::ostream& os, const T(&arr)[N]) { os << '{'; std::size_t i = 0; for (const auto& v : arr) { os << v; if (++i </typename></iostream>…

template parameter packのN番目の型を取り出すアプローチ

これはメタプロする事自体を目的にした遊びで,実用という意味で考えればO(N)で線形再帰するべき. 線形再帰ならば誰でも読めるし,数十個ぐらいなら最も速い.もし真面目にテンプレート引数を1000個も渡すケースに陥っているならばそれは多分そこに至る時点…

時間を浪費するのやめたい

限界AtoZタイピング #include <iostream> int main() { // Generate applescript std::cout << "on run {input, parameters}\n\tactivate application \"Google Chrome\"" << std::endl; for (char i = 'a'; i <= 'z'; ++i) { std::cout << "\ttell application \"Syst</iostream>…

dlopenやdlsym辺りの実装を読んでそのうちまとめたい

#include <dlfcn.h> #include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; if ((fp = fopen("hello.c", "w")) == NULL) { fprintf(stderr, "file cannot open"); exit(EXIT_FAILURE); } fprintf(fp, "#include <stdio.h>\n" "void hello(void) { printf(\"hello dl world!\\n\"); }</stdio.h></stdlib.h></stdio.h></dlfcn.h>…

大量のメモリを使用するプログラムからコマンドを実行する方法というのを読んだ

メモリを多く使用したプロセスから繰り返しfork()する場合,performance issuesになりうるという話. StackOverflow linux - 大量のメモリを使用するプログラムからコマンドを実行する方法 - スタック・オーバーフロー 実際困ることあるらしく 昨日今日ちょ…

github.io

htmlを生成するテンプレートエンジンJade Jade - Template Engine と,cssを生成するStylus Expressive, dynamic, robust CSS — expressive, robust, feature-rich CSS preprocessor の使い方について少し勉強したので,かねてより手を付けたいと思っていたg…

巷で流行りの活動日記

木構造系のデータ構造の実装のベストプラクティスが知りたいと思いつつ,適当に非常に簡単なものを試作するなど. 競プロ用途などで,自分用に簡単なprint機能などを備えた木構造のライブラリなどを作っておきたいという気持ちはある. TSから標準に入るopti…

Tower of Hanoi

#include <iostream> #include <stack> int main() { int n; std::cin >> n; std::stack<int> s[3]; for (int i = n; i > 0; --i) { s[0].push(i); } int mpos = 0; while (!s[0].empty() || !s[1].empty()) { s[(mpos + 1 + (n % 2)) % 3].push(s[mpos].top()); s[mpos].pop(); mp</int></stack></iostream>…

lambda is tuple

理解したのでメモ melpon.org #include <iostream> auto stack = [](auto... xs) { return [=](auto access) { return access(xs...); }; }; auto size = [](auto xs) { return xs([=](auto... z) { return sizeof...(z); }); }; auto push = [](auto xs, auto x) { re</iostream>…

型リストからindex_sequenceを作る

組込のfolding-exprを再帰深度O(1)とみなすと全体でも再帰深度O(1) melpon.org #include <type_traits> #include <utility> template<typename... Types> struct make_indices_from_types { private: template <std::size_t N, std::size_t...> struct make_indices { template <std::size_t M, std::size_t... Indices> make_indices</std::size_t></std::size_t></typename...></utility></type_traits>

printfに型チェックを付ける

どうもコンパイラ拡張で文字列を型パラメータとして取れるユーザ定義リテラルがあるようなので,printfに型チェックを付けるようなのを書いてみた. 桁数表示とか何も実装してないけれど,雰囲気がそれっぽくなってきたあたりで飽きた.もっと賢い実装方法が…

tuple_utility

jaredhoberock/tuple_utility · GitHub tuple_map, tuple_take, tuple_appendなど標準ライブラリに無いtuple操作ユーティリティのライブラリ.NVIDIA製. コードも短く,各操作の実装もシンプルで読みやすい.

tupleの実装解説記事

今年になってからスタートした丁寧なtuple実装解説の連載を見かけたので紹介しておきます. Implementing std::tuple From The Ground Up – Part 1: Introduction and Basic Structure http://blogs.microsoft.co.il/sasha/2015/01/12/implementing-tuple-pa…

リンク時に関連するルールの話

C++ Advent Calender 2014(http://qiita.com/advent-calendar/2014/cpp) 11日目の記事です. はじめに 今年はこれまでコンパイル時の話について沢山記事にしてきたので,たまにはリンク時に関連することを記事にしてみようと思います.把握している人にとっ…

99 bottles of beer

明らかにもっと共通部分を括りだす事が出来るのですが、なんとなく暇つぶしに書いたという感じなので。99だとWandboxで出力制限に引っかかってしまったようなので、ボトルを9つに減らしました。 [Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ #include <boost/preprocessor/arithmetic/dec.hpp> #include <boost/preprocessor/comparison/not_equal.hpp> #include <boost/preprocessor/comparison/greater.hpp></boost/preprocessor/comparison/greater.hpp></boost/preprocessor/comparison/not_equal.hpp></boost/preprocessor/arithmetic/dec.hpp>…

TMPでboolの計算 (memo)

trueとfalseをポインタ型と非ポインタ型に対応させることでパターンマッチが使える。再帰深度がO(1)に抑えられる。ユースケースとしては可変長引数テンプレートパラメータを受け取るコンテナとかのメンバ関数のnoexcept指定とか色々。 [Wandbox]三へ( へ՞ਊ ՞…

Template Parameter Packの要素へのアクセス

割と検索してくれている人が多いのでもう一度綺麗めに書き直したものを。(要C++14) type_at.cpp

プリプロセッサでFOR_EACHを実現する

[プリプロセッサ, 再帰]などで検索して来られる方が居ますがCプリプロセッサで再帰は出来ません。 プリプロセッサメタプログラミングにおける要素の走査は、再帰っぽく見えるだけで実際にはただの連番マクロを用いた展開によって実装されています。 少し実用…

何故noexceptの方がthrow()より高速なコードを生成出来るのか?

Quick Q: Why can noexcept generate faster code than throw()?—StackOverflow : Standard C++ 曰く、 With the C++98 approach, the call stack is unwound to f’s caller, and, after some actions not relevant here, program execution is terminated. …

_Generic

C11から導入された機能。なんというか、色々と面白い事に使えそうな感じの機能。タプルなんかと多分相性が良い。曲芸的濫用についてはまた今度考える。 ラムダ式でオーバーロードする最も簡単な方法かもしれない。 http://melpon.org/wandbox/permlink/14pwv…

memo

N4072: Fixed Size Parameter Packs O(1) #include <type_traits> template <typename T> struct identity { using type = T; }; template <std::size_t N, typename Tuple> struct at; template <std::size_t N, template <typename...> class Tuple, typename... Types> struct at<N, Tuple<Types...>> { template </n,></std::size_t></std::size_t></typename></type_traits>

再帰深度を抑えた畳込み関数

FTMPのメタ関数で使われている畳込みの実装アプローチをソースコードと勉強会で発表された資料を参考に理解した(気になった)ので、constexprで再現してみました。パックの分割に当たる操作と、相互再帰を利用して畳み込みがうまく実現されています。foldlとf…

N4072: Fixed Size Parameter Packs は期待出来る

N4072: Fixed Size Parameter Packsという提案が出ています。 参考記事: 本の虫: 2014-07 post Rapperswil mailingのレビュー: N4070-N4079 そこにこのような例があります。 template<unsigned int N, unsigned int M> void f(int...[N], int...[M]) {} f<2>(1,2,3); // M is deduced as 1. (</unsigned>…

Is there a name for this tuple-creation idiom?

たぷる系。面白いと思ったので紹介。 c++ - Is there a name for this tuple-creation idiom? - Stack Overflow