2021-01-01から1年間の記事一覧

[SlackLogViewer]Slack過去ログ閲覧ツール更新(3)。

最初はちょっとしたバグフィックスをして更新するつもりだったのだが、Qtでzipファイルを解凍せずに読み出すためのとても良いライブラリを見つけてしまったので、それも導入しつつ色々と改造した。 SlackLogViewerについての説明はこちら。 Windows版のダウ…

[C++][Qt]windeployqtをCMakeから実行する。

動機 オープンソース版のQtは基本的にLGPLライセンスであるため、ライセンスの汚染を避けるためには動的リンクが必要になる。この場合、何らかのアプリケーションを作って配布するときは、Qtの関連する共有ライブラリなどをアプリケーションに同梱して配布す…

[C++]ふと文字列リテラルによる名前付きtupleが欲しくなった話。

C++

何らかのクラスをタグとして与えるtuple、なら作る方法はネット上にいくらでも転がっているが、タグ用のクラスをいちいち宣言しなければならないのが鬱陶しいし、名前空間を汚してしまうのも気になるので、文字列リテラルで与えられるようにできないかなぁと…

[C++]アロー演算子オーバーロードでtuple、pairその他一時オブジェクトを返したい場合。

C++

久々の投稿だけど小ネタ。独自クラスのイテレータを設計しているときにちょっと悩んだので。 例えば何らかのイテレータを作っていたとして、そのイテレータの間接演算子が参照型ではなく、何らかの一時オブジェクトを返すものだったとする。 struct iterator…

[C++][vcpkg]vcpkgのパッケージバージョン管理、レジストリ編。

本頁の内容はvcpkgの非常に新しい機能についての説明で、正確な説明のなされた公式ドキュメントが著しく不足していることもあり、完全に手探りで書いています。他の環境やパッケージで動く保証も、また将来に渡り同じ方法が通用する保証もありません。私には…

[C++][vcpkg]vcpkgのパッケージバージョン管理、マニフェストモード編。

はじめに vcpkgはクラシックモードとマニフェストモードの2種類の動作があるようだ。クラシックモードはvcpkgの日本語解説でもよく説明されている、以下のようにパッケージを一つ一つ指定してインストールしていく方法である。 vcpkg install opencv3:x64-wi…

[C++][CMake]複数のコンポーネントから成るパッケージを作りたい時。

動機 多数のライブラリを含む自作のパッケージを、find_packageで他のプロジェクトからコンポーネント単位で利用できるようにしたかった。 つまり例えば次のように、ある自作のパッケージ(mylib)が複数のライブラリ(lib1、lib2、lib3)を持っており、その中か…

[C++][vcpkg]vcpkgに関する備忘録。

疑問が解決する度に追記していきたい。基本的にWindowsで使用することを想定している。 デフォルトのtripletを変更する 環境変数VCPKG_DEFAULT_TRIPLETの値を任意のtripletにすればよい。いちいちpackage名のあとにtripletを入力する手間が省ける。 個人的に…

[SlackLogViewer]Slack過去ログ閲覧ツール更新(2)。

SlackLogViewerの詳細はこちらの記事へ。ツールのダウンロードはこちらのGitHubページから。v1.1.Beta-2のSlackLogViewer.v1.1.Beta2.zipをダウンロードし展開すれば良い。 更新内容 キャッシュの管理機能を作った。ウィンドウ右上のアイコンをクリックする…

[C++][Qt]Qtのsignals、slotsなどのマクロ名が衝突するとき。

Qtに関する備忘録。 サードパーティーのライブラリなどではsignals、slotsのような名前が何かしら使われていることは珍しくないが、Qtはこれらの名前のマクロを持っているので、採用するライブラリによっては名前の衝突によってコンパイルできなくなることが…

[C++]日時、任意の数値型、任意の文字列、任意のrangeに対応させた。Gnuplotライブラリ更新(4)。

github.com 更新内容 これまでプロットに使えるデータ型はdoubleまたはstd::stringのみだったが、これをstd::is_arithmetic_v<T>またはstd::is_convertible_v<T, std::string_view>を満足する任意の数値型、任意の文字列型へと拡張した1。 データ配列の形式としてはstd::vectorのみが</t,></t>…

[C++]std::any_castせず格納されたオブジェクトを扱えるようなstd::anyは作れるか。

C++

以前作った実行時ジェネリクスのためのAnyは自由度を高め可変長引数や完全転送に対応させるために非常に入り組んだ設計になってしまったので、ずっと簡単でC++初級者にも分かりやすい設計にしてみようという試み。拘り過ぎると自分にとっては便利でも他人に…

[C++]std::ranges::views::zip、enumerateの代替機能を作ってみる。

C++

※本記事の内容はC++20の<ranges>を全く理解できていない人間が手探りで書いたものです。参考にするのは構いませんが鵜呑みにしないでください。 私はまだC++20を導入していないのだが、時代に取りに越されないために最低限の使い方を理解すべく、<ranges>で遊んでいる。ただ</ranges></ranges>…

[C++]<ranges>のstd::viewsと同様に扱えるviewを自作する。

C++

※本記事の内容はC++20の<ranges>を全く理解できていない人間が手探りで書いたものです。参考にするのは構いませんが鵜呑みにしないでください。 本記事はこの次の記事(C++20に入らなかったzip、enumerateの代替機能)の下準備である。あれをstd::viewsに対応させる</ranges>…

[C++] std::anyが動的メモリ確保を行うとき、行わないとき(msvc)。

C++

std::anyとは std::anyはどのような型のオブジェクトでも格納することが出来、デストラクタも勝手に呼んでくれるなかなか便利な機能である。C++17で導入されたType Erasureの一つだ。 この機能は一体どうやって実現しているのだろうか。規格に沿っているかど…

[C++]数式パーサーADAPT-FMPは本当にExprTkより速いのか。

自作ライブラリの話。 以前、ADAPT-FMPという文字列数式計算を行うためのライブラリを公開したのだが、自称世界最速と豪語したくせに、本当にそう名乗れるだけの性能があるのか計測したことがなかったので、ベンチマークを行うことにした。私の知る限りこの…