[c++]最近気づいたこと

アバター
purin52002
記事: 235
登録日時: 8年前
連絡を取る:

[c++]最近気づいたこと

投稿記事 by purin52002 » 7年前

最近になって気づいたこと
  • 名前空間便利
    プログラムの仕分けをしてる気分
    フォルダ整理とかと同じ感覚でやれるから好き
  • 抽象クラス、ポインタじゃなくても受け取れる
    これは驚き
    参照型で受け取れる
    よく考えれば参照もポインタと似た構造だし納得
  • getterじゃなくてreader
    vectorとか重たいデータをメンバに持つクラス
    getterで値を返そうとすると遅い
    publicにしてアクセスできるようにすると、勝手に値を書き換えられてしまうかもしれない
    const修飾した参照型を返せば早いし値も書き換えられない
    これをreaderと呼ぼう!
    と思ったらやっぱり先に考えてる人がいた
    ちょっと悔しい
あとちょっと愚痴

c++用の機械学習ライブラリ「dlib」
kerasとかtensorflowとかpythonのライブラリだと結構簡単にdeeplearningができる
でもdlibはちょっと面倒くさい
template使って静的にネットワークを作るから定義が面倒くさい
新しく機能を追加しようと思うと面倒くさい
英語のドキュメントを読まないといけないし
それなりにプログラムが難しくて見たくない

あと湯たんぽ
あれはすごい
朝起きてもお湯が冷めてなかった
ほんとにすごい

水満杯に入れた2Lペットボトルを電気ストーブの前に置いとくだけでできる
破裂しそうなぐらいパンパンに膨らむ
ちょっとテンション上がる^p^
書いてるだけでテンション上がってきた^p^p^

ISLe
記事: 2650
登録日時: 14年前

RE: [c++]最近気づいたこと

投稿記事 by ISLe » 7年前

purin52002 さんが書きました:
  • 名前空間便利
    プログラムの仕分けをしてる気分
    フォルダ整理とかと同じ感覚でやれるから好き
あまり知られてないみたいなのですが、既存の名前空間を仕分けし直すこともできます。

CODE:

#include 

namespace a {
    namespace b {
        int val = 123;
    }
}
namespace c {
    namespace d {
        int val = 456;
    }
}

namespace ns1 {
    using namespace a; // aの代わりにns1を使えるようにする
    using namespace a::b; // a::bの代わりにns1を使えるようにする
}
namespace ns2 = c::d; // c::dの代わりにns2を使えるようにする

int main()
{
    {
        std::cout << a::b::val << std::endl;
        std::cout << c::d::val << std::endl;
    }
    {
        using a::b::val; // 識別子a::b::valを修飾なしで使えるようにする
        //using c::d::val; // 識別子c::d::valを修飾なしで使えるようにする ※ここで識別子の衝突エラー
        std::cout << val << std::endl;
    }
    {
        using namespace a::b; // 名前空間a::bの識別子を修飾なしで使えるようにする
        using namespace c::d; // 名前空間c::dの識別子を修飾なしで使えるようにする
        //std::cout << val << std::endl; ※ここで識別子の衝突エラー
    }
    {
        std::cout << ns1::b::val << std::endl;
        std::cout << ns1::val << std::endl;
    }
    {
        std::cout << ns2::val << std::endl;
    }
}
最後に編集したユーザー ISLe on 2017年12月10日(日) 17:58 [ 編集 2 回目 ]

アバター
V30
記事: 21
登録日時: 10年前

RE: [c++]最近気づいたこと

投稿記事 by V30 » 7年前

粗探しに来ましたが、コード載ってない。残念。

なかなか難しい話をしてござる。
そうやって人は成長するのである。

ペット湯たんぽ、昨冬はよく使ったものだ。
直だとちょっとあっちぃけど。

てなワケで、湯たんぽサイコー!!!

アバター
purin52002
記事: 235
登録日時: 8年前
連絡を取る:

Re: [c++]最近気づいたこと

投稿記事 by purin52002 » 7年前

ISLeさん

そうなんですよ、名前空間を新しく名前空間として使うのが便利なのですよ。

CODE:

namespace a{ namespace b{
    namespace sin{ double Func(); }
    namespace cos{ double Func(); }
    namespace tan{ double Func(); }
}}

int main()
{
    namespace func = a::b::sin;
    func::Func();
}
こんな感じで使えば呼び出したい関数の静的変更が簡単にできることに気づきました^^

今までは関数オブジェクトの配列を作って使いたい関数のインデックスを定義するという方法をとっていました。

CODE:

double Sin();
double Cos();
double Tan();

int main()
{
    std::function Func[] = { Sin, Cos, Tan, };
    enum struct Index { SIN, COS, TAN, };

    const int index = static_cast(Index::SIN);

    Func[index]();
}
これに比べるとだいぶすっきり書けるようになったのでうれしい限りです^p^

アバター
purin52002
記事: 235
登録日時: 8年前
連絡を取る:

RE: [c++]最近気づいたこと

投稿記事 by purin52002 » 7年前

V30さん

こちらの日記にコードを挙げました。
今回気づいたことをだいたい盛り込んだコードになっています。

書いてるうちは気にならないんですけど、
こうやって客観的に見るとムダに長いですね^^;

読む気も失せるかもしれませんが、粗探しお待ちしております^^

自分のコードを他の人にみてもらうなんて今まであまりなかったので緊張もんです^p^