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

[C++]Boost.PFRの実装の解説のような。

動機 Boost 1.75.0からPFRが追加された。通常の構造体のメンバ変数に対してあたかもstd::tupleであるかのようにget<N>でアクセスできる、という謎機能ライブラリである。 このようなライブラリの存在は以前から知ってはいたのだが、白状すると、その機能を知っ</n>…

[C++]Visual StudioからClangを使うときに膨大な警告が出る。

問題 タイトルのとおり。オプションに与えているのは-Wallのみのはずだが、何故か-Wallでは出るはずのない警告が大量に発せられるのだ。 警告の内容は、C++98と互換性のないコードだとか、コンマ演算子の使い方に文句をつけられたりとか、static変数にいちゃ…

[C++]std::tupleのコンストラクタとstd::anyに関する豆知識。

C++

問題 次のコードを実行するとどうなるか? #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++]型情報を保持する汎用参照と、関数テンプレートでなくてもできるジェネリクスもどき。

C++

任意の型の参照を受け取ることのできる型が欲しい、と思ったことはないだろうか。例えば関数テンプレートに出来ない仮想関数で、引数に何が与えられるか分からないとき、どんな型であろうととりあえず参照で受け取ることができればと思ったことはないだろう…

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

タイトルの通り、SlackLogViewerをver-1.1.Beta-1に更新した。ツールの詳細については以前の投稿記事を参照されたい。ツールのダウンロードはGitHubのReleaseから。SlackLogViewer.v1.1.Beta-1.zipというファイルをダウンロードして解凍すれば良い。 更新箇…

[C++]一時ファイル生成を不要に。Gnuplotライブラリ更新(3)。

以前から公開しているC++用GnuplotライブラリADAPT-GPM2に対して、estshorter様から新機能のプルリクエストを頂きめでたくマージされたので、その情報+αを書き留めておく。 簡潔に言うと、Gnuplotにプロットするデータを送るために、従来は一時ファイルが作…

[C++]フォーマット指定が不要なfprintf関数のような何か。

C++

いちいちフォーマット指定しなくても、適当にフォーマットを生成してそれっぽく出力してくれるPrint関数を作った。……すげぇしょうもないもんを作ってしまった。 いや、その、訳あってFILE*とstreamを使い分ける必要が生じたのだ。特にフォーマットらしいフォ…

[C++]テキストファイルの読み込みを並列化するサンプル。

C++

※最近本ブログが「モダンC++を扱うブログ」として取り上げられ多くの人が訪問してくれていますが、普段の私はこんな感じの緩い記事ばかり書いているので、どうか過度に期待されないようお願いします。 動機 テキストファイルは普通、どんなに大きくてもMB単…

twitterでバズる人の気分は多分こんな感じなんだろう。

このブログがある方によって「モダンなC++を扱うブログ」の一つとして取り上げられたことで、アクセス数が突然激増してしまうという事態に見舞われた。何気なくアクセス解析を開いたら数字が普段の十倍くらいに跳ね上がっていたものだから何事かと思って、ど…

Slackの消えてしまった過去ログの閲覧ツールを作った。

以前から作っていたSlack過去ログ閲覧ツールSlackLogViewerを公開してみる。Wiindows、Mac用にはGitHubでビルド済みの状態でも配布している。Slackフリープランの10000件または90日制限への対策である。詳細は使い方の説明を。 macOS版がm1などApple Silicon…

[Qt][C++]QLineEdit編集中に常にPopupした状態になるWidgetを作る。

開発中のSlack過去ログビューワについての備忘録。アプリケーション本体は近日中に公開する。 あのアプリケーション中では、検索ボックスがクリック、文字入力等されている時は常にすぐ下に検索オプションを表示させるようにしている。が、この実装がそれは…

jsbookをjsreportっぽいレイアウトにするには。

私は学位論文用としてはjsreportのデフォルトのレイアウトが気に入っていたのに、jsreportでは一点だけ満足できなかった。ヘッダーである。偶数ページには章題、奇数ページには節題を表示したかったのに、それがどうにも上手くいかなかったのだ。一般にはfan…

[C++]SFINAEとC++20のコンセプトを比較してみる。

C++

C++のテンプレートが大好物な私は以前から話題になっていたコンセプトとやらにもそこそこ興味を持っている。コンセプトとはざっくり言えば、今までSFINAEを使って実現していたテンプレートパラメータに対する制限やオーバーロードを、もっと分かりやすく実現…

[C++]自称世界最速の文字列数式計算ライブラリを作った。

更新情報 2021年1月 C++標準への要求をC++14からC++17に変更しました。 ベクトル、行列をadapt::Vector<double>、adapt::Matrix<double>からEigenのVectorXd、MatrixXdに、文字列をadapt::Stringからstd::stringに変更しました。 上の変更に伴い、線形代数ライブラリEigenを</double></double>…

CMake-guiが起動しなくなったときの対処。

Windows10でCMake-guiを使っているのだが、ある日突然どういうわけか起動しなくなった。タスクバーにはCMake 3.16.4というボタンがアイコン付きで表示されるが、ウィンドウが現れないのだ。CMakeの再インストールを行っても直らない。これは3.18.0にアップデ…

[C++]enumを文字列に変換する汎用的な方法。

C++

2021年9月28日追記。どういうわけかアクセス数が増えているので、訪問者を混乱させないよういい加減だったサンプルを作り直した。 enumは単なる整数値に名前を付与する手段の一つだ。パラメータの意味がわかりやすくなる上、処理コストの大きな文字列を使わ…

[C++]Gnuplotライブラリを各軸の文字列表示に対応させた。Gnuplotライブラリ更新(2)。

タイトルのとおりである。GitHubで公開しているGnuplotライブラリADAPT-GPM2を、以下の図のように、軸を数値ではなく文字列にできるようにした。 #include <ADAPT/GPM2/GPMCanvas.h> using namespace adapt::gpm2; int main() { std::vector<std::string> x; std::vector<double> y; x.push_back("label-on</double></std::string></adapt/gpm2/gpmcanvas.h>…

[C++]std::decayの役割。

C++

std::decayは放射性のstd::atomicを非放射性へと変換するための機能である(嘘)1。 std::decayはよくわからない機能である。標準ライブラリの実装などを見ていると結構な頻度で見かけたりするのだが、一体何を目的に使用されているのかはすぐには理解できな…

[C++]関数の引数として受け取る固定長配列の長さは指定可能である。

C++

先の記事で配列型の扱いをいろいろ考えていた中で、ふと気がついた。一般に配列を受け取る関数は、配列引数を先頭要素へのポインタの形で受け取らざるを得ず、その配列の要素数を指定できないと思われている。確かに今や枯れ果てたC言語ではそうだった。が、…

[C++]テンプレートによる配列の扱い。std::anyは配列を格納できるのか。

テンプレートは配列型をどのように推定するのか。 C++のテンプレートを使っていて稀に遭遇する問題の一つは、配列の取り扱いである。私はC言語時代の配列を毛嫌いしていて基本的にstd::arrayを使うようにしているのでこの問題には滅多に引っかからないのだが…

Tensorflowによる連続値推定。

Tensorflowの最終的な出力が、分類ではなく何らかの連続値であってほしい場合がある。世間ではDeep Learning = 画像分類みたいなイメージが定着しているためか、サンプルを探してもそのようなものばかりであるが、連続値推定も可能である。例えば素粒子実験…

[C++]Visual Studio 2019でatl***.hが見つからない問題に対処する。

症状 最近Visual Studio 2019へと環境を移したのだが、これの上でプラットフォームツールセットをVisual Studio 2017(v141)に切り替えてビルドしようとすると、ATL(Active Template Library)がエラーを発するようになった。タイトルのように"atlstr.h"など…