std::functionに入れられない関数オブジェクトの話
2023-05-16
std::function
は、指定の引数リスト・戻り値型を持つ任意の関数オブジェクトを格納できる……これは実は真ではない。
C++ではstd::function
に入れられない関数オブジェクトというものが存在する。
具体的にはコピー不可能な関数オブジェクトは格納できない。 std::function
は格納する関数オブジェクトにコピーコンストラクト可能であることを要請する。
>>|
std::function
は、指定の引数リスト・戻り値型を持つ任意の関数オブジェクトを格納できる……これは実は真ではない。
C++ではstd::function
に入れられない関数オブジェクトというものが存在する。
具体的にはコピー不可能な関数オブジェクトは格納できない。 std::function
は格納する関数オブジェクトにコピーコンストラクト可能であることを要請する。
C++でこういうコードを書いたとする。
int a = 10, b = a * 2;
初期化がa→bの順で行われるなら問題は起きないが、仮に逆の順だと問題が起きるように思われる。その辺は規格上どうなっているのか調べてみた。
Vulkanにおいてはシェーダに何か共通の変数を渡すための方法として主に2つの方法がある。一つは「DescriptorSet」、もう一つは「PushConstant」だ。
この2つの使い分けに関する良さげな情報があったので読んでみた。
調べてもなかなか(自分にとって)的確な記述が出てこなかったので、(自分にとって)分かりやすくまとめ。
多分あんまり必要とされない知識だと思うがメモ。動機としては以下のような理由で調べていた。
結論から言って設定一つで解決する程度の話だったのだが、割と手間取ったのでメモ。