「C++の基礎 - クラス」の版間の差分

ナビゲーションに移動 検索に移動
447行目: 447行目:
  }
  }
  </syntaxhighlight>
  </syntaxhighlight>
<br>
==== テンプレート変換演算子 ====
変換演算子も、メンバ関数テンプレートにすることができる。<br>
テンプレート変換演算子により、任意の型への型変換が定義できる。<br>
<br>
テンプレート変換演算子は、代入や初期化時の左辺の型により、テンプレート仮引数を推測している。<br>
<syntaxhighlight lang="c++">
#include <iostream>
class CSampleClass
{
private:
    double    mValue;
public:
    explicit CSampleClass(double value) : mValue(value)
    {}
    template <typename T>
    inline operator T() const
    {
      return static_cast<T>(mValue);
    }
};
int main()
{
    CSampleClass cls(123.456);
    int i = fStore;
    double f = fStore;
    std::cout << i << std::endl;  // 123
    std::cout << f << std::endl;  // 123.456
}
</syntaxhighlight>
<br>
テンプレート変換演算子と、非テンプレートの変換演算子を共存させることも可能である。<br>
その場合、一致度が高い変換演算子が優先的に使用されるため、例えば、int型に変換する場合のみ、非テンプレートの変換演算子を使用することもできる。<br>
<br><br>
<br><br>


__FORCETOC__
__FORCETOC__
[[カテゴリ:C++]]
[[カテゴリ:C++]]

案内メニュー