C++
作った(嘘)1。 もう更新することはないと思っていたC++用GnuplotライブラリADAPT-GPM2であるが、データ分析ライブラリADAPTへ取り込むことでメンテナンスを再開した。 配布先のリポジトリはこちらへ。 C++には既にMatplot++というライブラリがあり、私もこ…
動機 C++20では指示付き初期化が導入された。これは集成体初期化を行う際にメンバ変数名を明示的に指定しつつ初期化する方法で、ありがたいことに、極めて簡単にC++での疑似名前付き引数として利用できる。 ただし指示付き初期化にも難点が多数ある。まず初…
ADAPTの更新情報である。本ライブラリを私個人も研究の中で本格的に導入し、その都度欲しくなった機能の追加などを行ってきたので、そのまとめだ。 ADAPTについての説明はこちらへ。 ADAPTのGitHubリポジトリはこちらへ。 条件指定可能な階層関数の追加 ADAP…
たぶん誰の役にも立たない記事。最近ブログを更新するネタがないので、気の抜けた記事の一つ二つ書いてもまあ良いかなぁと。 動機 私は自作ライブラリの中で、よく次のようなコードを書く。 auto [abc, def, ghi] = x.GetPlaceholders("abc"_fld, "def"_fld,…
動機 諸事情あってSIMDとやらの勉強をしている。ちょっとループ処理の高速化を目論んで色々調べていたのだが、私の使い方だと自動ベクトル化が働かないことが分かったので、自前で書かねばといろいろ勉強中なのである1。 ところで、SIMDについて色々と調べて…
ADAPTの更新情報である。リポジトリを公開してから3ヶ月間で色々と修正や機能追加してきたが、そのあたりについて簡単にまとめておく。 ADAPTについての説明はこちらへ。 ADAPTのGitHubリポジトリはこちらへ。 DTable、STableの追加 ADAPTがもともと有してい…
C++20に対応したインタプリタを使ってみた話。CERNのROOTというデータ分析ツールのプロジェクトチームが同時にClingというC++インタプリタを開発しており、これを導入してみた話である。ClingはLLVMに基づくインタプリタであり、公式にはClangにできることは…
1. はじめに 以前からブログやX(旧Twitter)でしばしば触れていることではあるが、私はC++でデータ集計や分析をするためのライブラリを制作している。今回、そのライブラリの最新版がいくらか動作するようになったので、GitHubでの公開とともにこのブログで…
例えば次のような関数があるとする。 constexpr int multiply(int a, int b) { return a * b; } inline int func(int a, int b, int c) { return a + multiply(b, c); } int main() { int a = 1; std::cout << func(a, 2, 3) << std::endl; return 0; } この…
nullポインタに関するメモ。 あるクラスのポインタを経由してそのメンバにアクセスしたい場合、通常はそのポインタがnullポインタであってはならない。しかしnullポインタであったり、有効なアドレスでなかったりした場合にも、staticメンバへのアクセスに利…
一年以上ぶりのC++記事であるが、緩めの内容。研究の方で一つ山場を乗り切ったので、気分転換にちょっと遊んでみた結果である。 動機 以前、巨大なテキストファイルの読み出しを並列化する記事を書いたことがある。CSVやSSVのように、ある程度統一されたフォ…
動機 オープンソース版のQtは基本的にLGPLライセンスであるため、ライセンスの汚染を避けるためには動的リンクが必要になる。この場合、何らかのアプリケーションを作って配布するときは、Qtの関連する共有ライブラリなどをアプリケーションに同梱して配布す…
何らかのクラスをタグとして与えるtuple、なら作る方法はネット上にいくらでも転がっているが、タグ用のクラスをいちいち宣言しなければならないのが鬱陶しいし、名前空間を汚してしまうのも気になるので、文字列リテラルで与えられるようにできないかなぁと…
久々の投稿だけど小ネタ。独自クラスのイテレータを設計しているときにちょっと悩んだので。 例えば何らかのイテレータを作っていたとして、そのイテレータの間接演算子が参照型ではなく、何らかの一時オブジェクトを返すものだったとする。 struct iterator…
本頁の内容はvcpkgの非常に新しい機能についての説明で、正確な説明のなされた公式ドキュメントが著しく不足していることもあり、完全に手探りで書いています。他の環境やパッケージで動く保証も、また将来に渡り同じ方法が通用する保証もありません。私には…
はじめに vcpkgはクラシックモードとマニフェストモードの2種類の動作があるようだ。クラシックモードはvcpkgの日本語解説でもよく説明されている、以下のようにパッケージを一つ一つ指定してインストールしていく方法である。 vcpkg install opencv3:x64-wi…
動機 多数のライブラリを含む自作のパッケージを、find_packageで他のプロジェクトからコンポーネント単位で利用できるようにしたかった。 つまり例えば次のように、ある自作のパッケージ(mylib)が複数のライブラリ(lib1、lib2、lib3)を持っており、その中か…
疑問が解決する度に追記していきたい。基本的にWindowsで使用することを想定している。 デフォルトのtripletを変更する 環境変数VCPKG_DEFAULT_TRIPLETの値を任意のtripletにすればよい。いちいちpackage名のあとにtripletを入力する手間が省ける。 個人的に…
Qtに関する備忘録。 サードパーティーのライブラリなどではsignals、slotsのような名前が何かしら使われていることは珍しくないが、Qtはこれらの名前のマクロを持っているので、採用するライブラリによっては名前の衝突によってコンパイルできなくなることが…
github.com 更新内容 これまでプロットに使えるデータ型はdoubleまたはstd::stringのみだったが、これをstd::is_arithmetic_v<T>またはstd::is_convertible_v<T, std::string_view>を満足する任意の数値型、任意の文字列型へと拡張した1。 データ配列の形式としてはstd::vectorのみが</t,></t>…
以前作った実行時ジェネリクスのためのAnyは自由度を高め可変長引数や完全転送に対応させるために非常に入り組んだ設計になってしまったので、ずっと簡単でC++初級者にも分かりやすい設計にしてみようという試み。拘り過ぎると自分にとっては便利でも他人に…
※本記事の内容はC++20の<ranges>を全く理解できていない人間が手探りで書いたものです。参考にするのは構いませんが鵜呑みにしないでください。 私はまだC++20を導入していないのだが、時代に取りに越されないために最低限の使い方を理解すべく、<ranges>で遊んでいる。ただ</ranges></ranges>…
※本記事の内容はC++20の<ranges>を全く理解できていない人間が手探りで書いたものです。参考にするのは構いませんが鵜呑みにしないでください。 本記事はこの次の記事(C++20に入らなかったzip、enumerateの代替機能)の下準備である。あれをstd::viewsに対応させる</ranges>…
std::anyとは std::anyはどのような型のオブジェクトでも格納することが出来、デストラクタも勝手に呼んでくれるなかなか便利な機能である。C++17で導入されたType Erasureの一つだ。 この機能は一体どうやって実現しているのだろうか。規格に沿っているかど…
自作ライブラリの話。 以前、ADAPT-FMPという文字列数式計算を行うためのライブラリを公開したのだが、自称世界最速と豪語したくせに、本当にそう名乗れるだけの性能があるのか計測したことがなかったので、ベンチマークを行うことにした。私の知る限りこの…
動機 Boost 1.75.0からPFRが追加された。通常の構造体のメンバ変数に対してあたかもstd::tupleであるかのようにget<N>でアクセスできる、という謎機能ライブラリである。 このようなライブラリの存在は以前から知ってはいたのだが、白状すると、その機能を知っ</n>…
問題 タイトルのとおり。オプションに与えているのは-Wallのみのはずだが、何故か-Wallでは出るはずのない警告が大量に発せられるのだ。 警告の内容は、C++98と互換性のないコードだとか、コンマ演算子の使い方に文句をつけられたりとか、static変数にいちゃ…
問題 次のコードを実行するとどうなるか? #include <iostream> #include <cstdlib> #include <tuple> #include <any> void print(const std::any& a) { if (a.type() == typeid(int)) std::cout << "any contains int" << std::endl; else if (a.type() == typeid(std::tuple<int>)) std::cout <</int></any></tuple></cstdlib></iostream>…
任意の型の参照を受け取ることのできる型が欲しい、と思ったことはないだろうか。例えば関数テンプレートに出来ない仮想関数で、引数に何が与えられるか分からないとき、どんな型であろうととりあえず参照で受け取ることができればと思ったことはないだろう…
以前から公開しているC++用GnuplotライブラリADAPT-GPM2に対して、estshorter様から新機能のプルリクエストを頂きめでたくマージされたので、その情報+αを書き留めておく。 簡潔に言うと、Gnuplotにプロットするデータを送るために、従来は一時ファイルが作…