emplace_back

C++11から,いくつかのコンテナ(vectorとかdequeとか)に emplace_back というメンバ関数が増えていた.

class Hoge{
    int a;
    double b;
    std::string c;
    public:
        Hoge(int a, double b, const std::string& c)
            :a(a), b(b), c(c){}
};

というクラスがあったとして,これのインスタンスをvectorなどのコンテナに入れるとする.

これまでは,

std::vector<Hoge> x;
x.push_back(Hoge(a1,b1,c1))
x.push_back(Hoge(a2,b2,c2))
x.push_back(Hoge(a3,b3,c3))

という感じで書いていた.
これは,一時的にインスタンスを生成してvectorの要素にコピーしている.

emplace_backを使うと,

std::vector<Hoge> x;
x.emplace_back(a1,b1,c1)
x.emplace_back(a2,b2,c2)
x.emplace_back(a3,b3,c3)

という風に書けて,vectorの要素に直接インスタンスを生成できる(?).

面白いのが,このemplace_backの引数の型や個数はコンテナに入れるクラスのコンストラクタによって決まるので,
どんな型の引数を何個受け取るのかはvectorやdequeの実装時には分からない.

これを実現しているのが可変長引数テンプレート(variadic templates)というテクニック.
C言語でもある,可変長引数のテンプレート版…かな.
こちらも再帰をうまく使って型と引数を取り出すっぽい.
これはまだ要勉強.

知覚過敏

歯医者に行ってきた.

診断の結果,知覚過敏らしい.
歯と歯肉の間に何か塗って治療終了.

水を飲んだ時に染みるのは収まった.

歯が痛い

歯が痛い…久しぶりに歯医者に行かないといけない.
明日予約しよう….

ping で送るデータのサイズを変える

ping にはパケットのサイズを変えるオプションがある.

windows では -l オプション.unixでは -s オプション.
それに続けて数字を入れると,そのバイトサイズのパケットを送ることができる.

突然,添付ファイル付きメールが送れなくなって,色々格闘した結果,

ping (サーバ名)

ではうまくいくのに,

ping -l 1000 (サーバ名)

ではうまくいかないことを突き止めた.
これは,まとまったサイズの送信ができていないということ.
大抵の場合,ネットワークに問題がある.

今回の場合,PC側のLANケーブルが抜けかけてたのが原因だったようだ.

YO

最近話題のYO始めてみました.

YOはワンタップで友達に「YO」を送れるアプリ.
それだけ.

Facebookのメッセンジャーで,イイネ送り合ったり,pokeしあったりすることが多かったので,
これも同じようなノリで使えそう.

http://www.justyo.co/YASUTOMO57JP/

僕のアカウントはこちら.
YOください.

天一

久々に天一.

ニンニク入れすぎた結果,またもやものすごいにんにく臭い人になった.

楽天ポイント10倍キャンペーン

来月の出張時の宿泊先を調べていたところ,
楽天ポイント10倍キャンペーンが行われていたので,
ついつい釣られてそのビジネスホテルを選択した.
お陰でどんとポイントが貯まった.
それだけ.