059264 ランダム
 ホーム | 日記 | プロフィール 【フォローする】 【ログイン】

田舎暮らしエンジニアの備忘録

【毎日開催】
15記事にいいね!で1ポイント
10秒滞在
いいね! --/--
おめでとうございます!
ミッションを達成しました。
※「ポイントを獲得する」ボタンを押すと広告が表示されます。
x
2021.08.16
XML
カテゴリ:C++
今まで使いどころがわからなかった、ラムダ式が便利なのを実感したこと。

他クラスのget/setアクセサをたくさん作らないといけないとき、ラムダ式でデータを取り出す部分だけ共通化すると書く量が減らせる。


  • データ保持用クラス
unordered_mapでデータを格納している。
unordered_mapのキーには文字列を与えているので、使う側が指定してきたキー文字列をcount()でチェックしている。
何も考えないでget/setアクセサを作ると、用意したいアクセサの数だけチェック処理を書かないといけない。

class DataAccess
{
public:
    struct MyData {
        std::string str = {};
        int num = 0;

        MyData(std::string in_strint in_num) {
            str = in_str;
            num = in_num;
        }
    };

    DataAccess()
    {
        umap_data.emplace("1st"MyData("data1"100));
        umap_data.emplace("2nd"MyData("data2"200));
        umap_data.emplace("3rd"MyData("data3"300));
        umap_data.emplace("4th"MyData("data4"400));
        umap_data.emplace("5th"MyData("data5"500));
    }

    std::function<MyData(std::string key)> getMyData()
    {
        return [&](std::string key) {
            if (umap_data.count(key) == 0)
            {
                return MyData("data not found"0);
            }
            return umap_data.find(key)->second;
        };
    }
private:
    std::unordered_map<std::stringDataAccess::MyDataumap_data;
};



  • main関数
ラムダ式で定義した文字列を引数にしてMyDataを取得する関数を使う。

int main()
{
    DataAccess data_access = {};
    auto func = data_access.getMyData();
    std::vector<std::stringarguments;

    arguments.push_back("1st");
    arguments.push_back("2nd");
    arguments.push_back("6th");
    arguments.push_back("3rd");
    arguments.push_back("4th");
    arguments.push_back("5th");
    arguments.push_back("9th");

    for(autoargument : arguments)
        std::cout << "string : " << func(argument).str << " / num : " << func(argument).num << std::endl;
}




  • 実行結果:
string : data1 / num : 100
string : data2 / num : 200
string : data not found / num : 0
string : data3 / num : 300
string : data4 / num : 400
string : data5 / num : 500
string : data not found / num : 0






★楽天デイリーランキング1位★ 室内用テント プライバシーテント リモートワーク 個室 室内 テント テレワーク 在宅ワーク ぼっちてんと ゲーミングテント 簡易テント 窓付き コンパクト 収納バッグ 在宅勤務 リモート 災害 リモートオフィス

​​
【ふるさと納税】国産!かごしま黒豚さつまロールステーキ20個(合計1kg)鹿児島県産黒豚肉を手作業で巻いた冷凍ロールステーキを小分けパックでお届け!お弁当やおかずに最適【AKR Food Company】





お気に入りの記事を「いいね!」で応援しよう

最終更新日  2021.08.16 22:27:57
コメント(0) | コメントを書く



© Rakuten Group, Inc.