ソースを見ていて分からないところがあったので教えて下さい。
なんと説明すればいいのか分からないので下に要約したソースを書きます。
template <typename T>
class Hoge {
T a_;
public:
Hoge(T a = 0) : a_(a) {}
operator T() const { // ココが分からない
return a_;
}
};
最初は、関数オブジェクトかと思ったのですがそうではないですよね?
operator()(引数) ですよね?
次は、Tのコンストラクタかと思ったのですが、class Hoge の中に書くのも変な気がしました。
No.2ベストアンサー
- 回答日時:
それは、(templateに限らない)暗黙の型変換演算子定義です。
例えば、T=intの場合、
Hoge hoge;
int foo = hoge; // ここでhoge::operator int()constが呼ばれる
というようなことができます。
普通のクラスでも
class Bar
{
int bar_;
public:
operator int()const { return bar_; }
// ....
}
等が定義可能です。言語の参考書などを確認してみてください。
この回答への補足
主にCをやってきた人間なのですが
キャストが関数になるという、感覚がなかったです。
dynamic_cast,static_cast,reinterpret_cast,const_cast,boost::lexical_cast
あたりもそうですね。
以下のようにすれば、複数キャストが作れますね。
あたりまえですが。
template <typename T, typename U>
class Hoge {
T a_;
U b_;
public:
explicit Hoge(T a, U b) : a_(a), b_(b) {}
operator T() const {
return a_;
}
operator U() const {
return b_;
}
};
int main() {
Hoge<int, char*> a(4, "abc");
int x = a;
char * y = a;
...
}
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・人生のプチ美学を教えてください!!
- ・10秒目をつむったら…
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・【大喜利】【投稿~9/18】 おとぎ話『桃太郎』の知られざるエピソード
- ・街中で見かけて「グッときた人」の思い出
- ・「一気に最後まで読んだ」本、教えて下さい!
- ・幼稚園時代「何組」でしたか?
- ・激凹みから立ち直る方法
- ・1つだけ過去を変えられるとしたら?
- ・【あるあるbot連動企画】あるあるbotに投稿したけど採用されなかったあるある募集
- ・【あるあるbot連動企画】フォロワー20万人のアカウントであなたのあるあるを披露してみませんか?
- ・映画のエンドロール観る派?観ない派?
- ・海外旅行から帰ってきたら、まず何を食べる?
- ・誕生日にもらった意外なもの
- ・天使と悪魔選手権
- ・ちょっと先の未来クイズ第2問
- ・【大喜利】【投稿~9/7】 ロボットの住む世界で流行ってる罰ゲームとは?
- ・推しミネラルウォーターはありますか?
- ・都道府県穴埋めゲーム
- ・この人頭いいなと思ったエピソード
- ・準・究極の選択
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
typedef enumの使い方を教えて...
-
C++のfor文について
-
DWORDの実際の型は何でしょうか
-
C++でboolにintの値を代入する...
-
visualstudio C# テキストボッ...
-
long型の定数の末尾にLを付ける...
-
構造体の宣言でエラーが出ます。
-
【#define】 defineで定義した...
-
C言語での方向キー入力判定
-
2重定義って??
-
main.c:7:43: warning: implici...
-
プログラムの中で別のmainを呼...
-
変数の型を定義しなかった場合...
-
int main の前のint add(int a,...
-
sshdログの意味
-
関数の実体定義にヘッダファイ...
-
C++ template operator T()
-
void func( void )について
-
0除算を判定したい
-
配列を用いない最大値の求め方
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
DWORDの実際の型は何でしょうか
-
visualstudio C# テキストボッ...
-
2重定義って??
-
long型の定数の末尾にLを付ける...
-
C++のfor文について
-
typedef enumの使い方を教えて...
-
C++でboolにintの値を代入する...
-
関数の実体定義にヘッダファイ...
-
main.c:7:43: warning: implici...
-
構造体の要素すべてに対する四...
-
変数の型を定義しなかった場合...
-
void func( void )について
-
【#define】 defineで定義した...
-
VC6でlong longでエラー?
-
0除算を判定したい
-
プログラムの中で別のmainを呼...
-
C言語のコンパイルエラー
-
構造体の宣言でエラーが出ます。
-
intとINTの違いは?
-
DLLでLIBファイルが作成されない
おすすめ情報