通知
すべてクリア
03/05/2022 2:56 pm
動画C++⑩の18:12部分
static_assert(std::is_base_of<Singleton, Type>::value);
動画に説明が無かったので、この行の意味について教えてください。
static_assert
と is_base_of
を検索して、コンパイル時にSingltonがTypeクラスを継承しているか、をチェックすることは分かったのですが、この行が- どのような場合にfalseになり
- どういう状況で役に立つのか
を教えてもらえますでしょうか。
03/05/2022 2:56 pm
SingltonがTypeクラスを継承しているか
ー>SingletonがTypeクラスを継承することではなくTypeクラスがSingletonクラスを継承することが正しいです。Singletonクラスが親、Typeクラスが子です。
1.どのような場合にfalseになり
ー>TypeクラスがSingletonクラスを継承してない場合はfalseになります。
2.どういう状況で役に立つのか
ー>static_assert関数はfalseが入った時にコンパイルエラーを出す関数です。TypeクラスがSingletonクラスを継承しない時はコンパイルエラーが出るのでエラーチェックするための処理です。例外処理で検索すれば詳しいことを理解できると思います。
03/05/2022 2:57 pm
例えば今回のプロジェクトで
class BigOrSmall : public utility::Singleton<BigOrSmall>
というクラス宣言があります。
BigOrSmall
は Singleton
を継承して生成される一方、継承の際に既に BigOrSmall
を型として渡しており、循環参照しているように見えます。どちらが先に処理されるか分からず混乱しています。
どういう処理の流れでこのようなことが可能になるのでしょうか。
どういう処理の流れでこのようなことが可能になるのでしょうか。
03/05/2022 2:57 pm
テンプレートクラスを継承する場合はその書き方になります。