これまで、しばらくの間、業務で得た知識の一部であり、C++をはじめとする技術的な話を継続してきましたが、本日でしばしのお別れとなります。
読んでくれた人、ありがとうございました。
]]>開発用のCentOSのイメージが見つからなかったので、必要となるパッケージの特定に時間がかかって、構築は面倒でした。
WSL2では仮想マシンのコントロールがないので、動作がよく分かりません。メモリやハードディスクなど。topやvmstatなど内部からのモニタリングしかできない感じです。限界に近いところではどうなるんだろう?という疑問は残ります。
ただグラフィックスがない分、すんなり動作しているようには思います。CUIだけで良ければ、WSL2もありかな?と思います。
※WSLではまだ動かないモノもあるので、そのあたりは自己責任で調べてください。
]]>std::string s = R"("ABC"
"XYZ")";
]]> もし、文字列の中に「)"」が必要となる場合は、次のように変更することができる。**の部分はなんでもいい。
std::string s = R"**("(ABC)"
"(XYZ)")**";
]]>
class クラス名 final : public ベースクラス名 { ... }
class クラス名 : public ベースクラス名 {
virtual void func() final;
...
}
という感じですね。
]]>ヘッダー<concepts>には、型の関係や種類をチェックするための機構が用意されている。
]]> サンプルにあるのだが、次のような定義を書くことで、movableなTと、movableでないTに分けることができる。とても興味深い。namespace std {
template<class T>
concept movable = ...;
}
template<std::movable T>
void f(const char* name) {
std::cout << name << " is movable" << std::endl;
}
template<typename T>
void f(const char* name) {
std::cout << name << " is not movable" << std::endl;
}
f<int>("int");
f<void>("void");
]]>
こんな書き方ができるようになる。
std::pair<int, std::string> p = {1, "hello"};
auto [id, message] = p;
]]>さて、問題です。
pairとtuple以外どのクラス、どの条件があれば、構造化束縛できるでしょうか?
]]>コンパイル時に評価されて、実行時には使わないので、実行時に呼び出すことはできない。関数実体がないので、関数アドレスを取り出すことはできない。
]]> std::source_location::current()は、constevalで記述されている。__LINE__や__FILE__と同じ働きをする。constexprは、コンパイル時でも実行時でもどちらで評価してもよいところが異なる。
]]>おもに一時オブジェクトを作成した後に呼び出すメンバ関数で処理を変更したいときに使うかな?
]]> struct X { int f() & // *thisが非constな左辺値である場合に呼び出される { return 1; } int f() const & // *thisがconstな左辺値である場合に呼び出される { return 2; } int f() && // *thisが右辺値である場合に呼び出される { return 3; } }; X x; const X cx; std::cout << x.f() << std::endl; // 1 std::cout << cx.f() << std::endl; // 2 std::cout << X().f() << std::endl; // 3 ]]>一般には、これを定義すれば、ほかの比較演算子は記述する必要がなくなります。std::rel_ops、お疲れ様。
]]>]]>
引数の型が違うコンストラクタを複数記述するときなどに、1つのコンストラクタに集約する機能です。引数値の省略でも一部のコンストラクタはまとめることができますが、引数の型が違う場合は不可能でした。
これまでコンストラクタから同じクラスのコンストラクタを呼び出すことができなかったのです。このため、各コンストラクタの初期化式に各メンバの初期化処理を並べるはめになっていました。これは、メンバの数やコンストラクタの数が多いとメンテナンスがたいへんでした。
積極的に使っていきたいものです。
]]> Objective-C, Swiftなどのほかの言語では、「指定イニシャライザ」という機能がありました。]]>読んでみて、どういう感想を持ちましたか?
・あたりまえ、いまさら?
でも、世の中、こんなコードがあふれているんですよ。
まあ、私には「setValue(3)」なんてのが良い例とは思えないのですけどね。
]]> Martin Fowlerさんが誰だか分からない人は、まず「リファクタリング(ISBN-13 : 978-4274224546)」を読みましょう。これ以外にも、Martin Fowlerさんの記事、たくさんあって、どこから読めばいいか分からないでしょ? 分類とかタイトルとかで気になる記事をざっと探して、まずは、こういう簡単な記事から読むことをお勧めします。無理しないで、少しずつ読んでみませんか?
]]>ここの説明見ても分からないようなら、さっさと諦めようw
]]>周りにはできる奴があふれていて、オレがやることは何もないので、まだ未熟な未経験に近い者を指導していくようになると。現役バリバリの奴らには、そういう負担は負わせられないと。
]]> プログラマは35歳で引退じゃなかったのかよ。このままいくと、定年を迎えても、まだ現役なんじゃないのか?
]]>