13,009
回編集
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++]] |