読者です 読者をやめる 読者になる 読者になる

制限解除union

しばらくブログを書いていなかったが、実際のところペーパーワークに駆られて(現在進行形で駆られている)コードをほぼ書けていない。そのストレスで日曜日に何の関係もないコードをゴリゴリ書いていた。そこでタイトルにあるものを使って、ボンミスで時間を飛ばしてしまった。

続きを読む

typedef typename trait::template something<T>::type type;

あるstructのメンバであるtemplate structをtemplate argumentとして受け取ってその中身をtypedefする、というときの書き方が(もう少し普通な状況でも出てくると思うが調べていない)、この18行目の文法がキモい2017だったので置いておく。

[Wandbox]三へ( へ՞ਊ ՞)へ ハッハッ

この書き方は寡聞にしてしらなかった

#include <iostream>
#include <array>

struct X
{
    template<typename T> struct fixed_array;
};

template<> 
struct X::fixed_array<double>
{
    typedef std::array<double, 4> type;
};

template<typename T, typename F>
struct Y
{
    typedef typename F::template fixed_array<T>::type type;//これ
    type container;
};

int main()
{
    typedef Y<double, X>::type type;
    type p{{1.,2.,3.,4.}};
    for(auto&& item : p)
        std::cout << item << std::endl;
    return 0;
}

しかし何度か書いてから見直すと自然に見えてくるのだから不思議だ。

vtkで分子を描画

vtk7.0.0が出たという記事を見た時、といってももう1年も前なのだと今気付いたが、分子のためのクラスがあることを知った。で、以前vtkで分子を表示するために複数個の球体を浮かべようと悪戦苦闘した記憶が思い起こされ、こういうものがあるなら使ってみたいと思った。

VTK 7.0.0 | The Kitware Blog

続きを読む

スコープ内の時間計測

以前、関数の時間計測のために返り値をラップする構造体を作っていたが、これはRAII的に考えて

Logger logger;
/*... codes ...*/
{
    stop_watch<std::chrono::milliseconds> sw("block-name", logger);
    /* do_something */
}

とスコープの先頭で宣言すればスコープ内でかかった時間のログが取れるようにできる。

続きを読む

自作コンテナを作ろうとしたらboostにあった話

タイトルで全てを言い切ったので今日の日記は終わりです。嘘です。でもマジで書くことがない。

続きを読む

bobthefishでstring関係のエラーが出た

普段、 fish shell なるシェルを愛用している。Linuxに触れて1年半ほどだが、最初は普通にbashを使っており、1年経つか経たないかの頃、ちょうど別のshellのことを考え始めた頃にどこかでfish shellを知って入れてみたのだったと思う。どこで見たのかは忘れてしまった。

続きを読む

関数の時間計測

C++threadライブラリを使っている。いかんせん並列化の経験が少ないのでちゃんとthreadが立ち上がっているのかとか、並列に処理されているのかとかがよくわからないし、ツールもよく知らない。VTuneのことは知っているが個人で持っているようなものでもない。なので、最も愚直な方法、単に時間を計測して出力して調べることにした。

しかし、出力するといっても、文字の出力はatomicではない。しかし、関数内でmutexlockしたりする場合、そのmutexのスコープはどうなるのか。グローバルか? だとすればあまり嬉しいことにはならない。実際には最終的に出力するべき内容が全て出力できればいいのだから、関数から時刻も一緒に返して受け取ってから単一のスレッドで出力を行えばよいことになる。というわけで以下のようなコードを書いた。

続きを読む