歯磨きが切れてしまったので,自作した

歯磨きが切れてしまったので,自作した.

IMG_20231002_193401

材料は,塩,乾燥剤,片栗粉,石けん液.乾燥剤のストックはあるが,成分表示がないものが多くどれにしようかと迷ったが,石灰と明記してあるものが一つあったのでそれを使った.香料が入っていないのは残念だが使用感は悪くない.ただし,腔内の傷口にはかなりしみた.唇が膨れ上がるというほどでもないが,連用してどうなるかは未知数だ※.

※さすがに,ちょっと無理っぽい.以前炭の入った乾燥剤を使ったときは結構うまくいったのだが… アルカリ度が強過ぎるようだ.

またブランクが空いてしまった.こんなペースではいつ仕上がるのか見通しが立たない.やればやるほど,FBの物理数学グループに費やす時間が増えてゆく.開きっぱなしのVSを閉じて再起動したら,エラーが出ている.どこまでやったのかも忘れてしまった.問題は「C#からC++への配列の受け渡し」だ.型名[] 変数名のような形式で宣言されたC#の配列はC++/CLIに移すことができない.とすれば,std::arrayなどを使うしかないのだが,arrayの二次元配列をうまく作ることができなかった.一次元配列ならマーシャリングすれば受け渡しはできそうだ.いや,多分,その辺りはクリアされていると思う.

unsafe というのを使うしかないのかもしれない.unmanaged というのもあり,これを使えばアンマネージドコードの中でポインタが使えるようになる.もしかするとこれが一番早いかもしれない.もし,C#でポインタが自由に使えるということになれば,マーシャリングなどという厄介な話は泡沫もなく消えてしまうのではないか?もちろん,それだけのリスクは伴うものであるかもしれないが… もうひとつ,fixed というキーワードもある.後事のため,コードをコピーしておこう.

unsafe static void MemSet0<T>(ref T x)
where T : unmanaged
     {
         // 今まではこの T* が許されなかった。
         // たとえ、Point みたいにポインター化可能な型で MemSet0<Point> を呼んだとしてもダメ。
         // unmanaged  制約のおかげで、ポインター化可能になった。
         fixed (T* p = &x)
         {
             var b = (byte*)p;
             var size = sizeof(T);
             for (int i = 0; i < size; i++)
             {
                 b[i] = 0;
             }
         }
     }

おそらく,これを使えばかなり自由に配列のコピーはできると思うが,配列の内容がstringのような場合はまたかなり話が変わってくる.将来的にはString配列まで使うようになる可能性は高いので,対処しておいた方がよいと思う.その意味ではやはり array を使うという選択肢になるのだが… 以下の記事を読むとC#ではこれまで禁止されていたほとんどのネイティブ操作がどんどん許されるようになっているように見える.さすがに,C#周辺のプログラマも我慢しきれなくなってしまったのだろう.良い傾向だ!いよいよ馬場研究所の日が来るのかも知れない.

https://ufcpp.net/study/csharp/sp_unsafe.html#how-unsafe

つまり,C++でしか書けないと思っていた当研究所のオリジナルコードをC#で書ける日が来るのではないか?いや,さすがにオリジナルコードをC#で書くのは無理としても,C#の中から自由にそれらを呼び出せるようになるだろう.つまり,マネージドとアンマネージドを隔てていたベルリンの壁が崩壊する.やったね!この辺りの事情に詳しいのが,++C++; // 未確認飛行 C というサイトだ.このサイトは一度じっくり目を通しておいた方がよいかも知れない.

https://ufcpp.net/

一応何とかなりそうだという感触は得たが,まだコードは通っていない.二次元配列の受け渡しをやっているサンプルがどこかにあればよいのだが… もっと基本的なところから(一から)やった方がよいのではないか?いや,ジェネリックなデータの受け渡しはすでにやっている.たとえば,Stringというデータ型はC#でもC++でもそのまま使える.従って,問題はやはり配列の操作だ.とりあえず,C#の二次元整数配列の受渡しを見てみることにしよう.

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA