chikuchikugonzalezの雑記帳

趣味とか日記とかメモとか(∩゚д゚)

std::shared_ptrで親子関係にある型のキャスト.

テンプレート化されたクラスはテンプレートパラメータが親子関係でも別クラスなので代入できねぇ、とか思ってたんですがshared_ptrでふつーにできたり、キャストする方法があって(´・∀・`)ヘー って思ったのでメモしておかなきゃ

#include <memory>
#include <iostream>

class Base {
public:
    virtual void hello() {
        std::cout << "Hello in Base!" << std::endl;
    }
};
class Sub : public Base {
public:
    virtual void hello() override {
        std::cout << "Hello in Sub!" << std::endl;
    }
};

int main(void) {
    std::shared_ptr<Base> p1 = std::make_shared<Base>();
    std::shared_ptr<Sub>  p2 = std::make_shared<Sub>();
    std::shared_ptr<Base> p3 = std::make_shared<Sub>();
    std::shared_ptr<Sub>  p4 = std::dynamic_pointer_cast<Sub>(p3);

    p1->hello();    // => Hello in Base!
    p2->hello();    // => Hello in Sub!
    p3->hello();    // => Hello in Sub!
    p4->hello();    // => Hello in Sub!

    return 0;

リファレンス見たら dynamic_cast 以外のキャストも全部専用のがあるっぽいね

Specific functions:

make_shared Make shared_ptr (function template )
allocate_shared Allocate shared_ptr (function template )
static_pointer_cast Static cast of shared_ptr (function template )
dynamic_pointer_cast Dynamic cast of shared_ptr (function template )
const_pointer_cast Const cast of shared_ptr (function template )
get_deleter Get deleter from shared_ptr (function template )
shared_ptr - C++ Reference

一部キャラを一時非公開にしました

世間で起きている騒動に対応して、一部のキャラを非公開とさせていただきました。


対象
  • 遠野家当主 (制服)
  • 白い方のレン (未完成)
  • シェリス (未完成)

必要な場合は連絡下さい。

新型の親指型トラックボールキタ━(゚∀゚)━!

しかもロジクールが新型だしてくれるかと思ってたらまさかのELECOMから。

エレコムがトラックボール2モデル発売。手の「のせ心地」を追求、ポインタ減速スイッチ搭載 - Engadget Japanese

親指型で5ボタンとか最高じゃないですかー。

で、会社からの帰りにポチッた(ゝω・)

いやー、マジ衝動買いだったわー *1


実際のところ今使ってるロジクールのM570と形は変わらなそうだし、性能とか値段とか上だから割と期待してたりはする。横スクロールもできるらしいし。

LOGICOOL ワイヤレストラックボール M570t

LOGICOOL ワイヤレストラックボール M570t

とはいえ、一番欲しいのは無線になった↓なんだけどねー。
ホント、人生初のトラックボールにして大学時代の5~6年間ずっと使ってた。たぶん今でも問題なく使えるはずだけど、無線に負けてしまってある。

Microsoft、また作んないかなー…

*1:まだ発売してません

SFFv2のLZ5圧縮の情報

Go言語用のMUGENバイナリライブラリとしてこんなの作り始めたんですが、


chiku2gonzalez / MUGON — Bitbucket

そこでLZ5デコーダを実装しながら調べたものをまとめました。以下に置いてあります。
主に公式Wikiとフォーラムの情報でした。


SFFv2フォーマット - chikuchikugonzalezの遊び場

Recycle Bitとか謎いなー、と思ってたけどわかるとそんなことになってる理由もなんとなくわかったり。

公式Wiki
  • Control Packetのフラグで、RLE/LZがどっちなのかが書いてないのは不親切だと思うんだよ
  • もうちょっとサンプルコードとかないんですか…?

Go言語用コード断片リポジトリ名を改名した

今まで適当に gomibako *1 っていうダサい名前にしていたけど*2、思うところがあって名前 Goobers に変えました。

chiku2gonzalez / Goobers — Bitbucket

(Gooberはピーナッツのことです)

改名ついでに

  • gomibako/regexp → goobers/text/regexp
  • gomibako/pcx → goobers/image/pcx

と、パスまで変える始末でした

*1:すでに非公開にした

*2:決めた時はイケてるとか思ってたと思う

ドット絵エディタEDGEのファイルをGIMPで開くためのプラグイン書いた

今までドット絵描くのにEDGEを使ってたわけなんだけど、ふとGIMPに移行しようとか思ったらどうしよう*1、とかよくわかんない心配をしたりして。
そうしたらEDGE形式用のC++ライブラリがあるじゃないですか。しかもソースコード公開されてるときた*2

そこでふと

GIMPってPythonプラグイン書けたよな…?

って思ってしまったんですよ。で、やや苦労しつつも四日くらいでできた。
長ぇ( ゚д゚)って思ったので続きを読むからで。

*1:レイヤーを維持したまま別のファイル形式に移行、ということを考えるといったんGIMP形式にした方がよさそうじゃないですかー、っていう発想

*2:Susieプラグインがあるのは知ってた

続きを読む