2016-03-30 15 views
0

オブジェクトの暗黙の変換の戻り値の型を取得するにはどうすればよいですか?暗黙の変換のタイプを取得

struct Bar { 
    operator int() const { 
    return 0; 
    } 
}; 

// std::result_of<Bar>::type value; ??? 
// std::result_of<Bar::operator ??? >::type value; 

私が使用できます。

std::is_convertible<Bar, int>::value 

が、フロートについても同様is_convertibleである、などのunsigned int型を....私は正確な型を持っていると思います。

編集:私の質問が不明確なように思えるので、暗黙の変換タイプを知りたいのはなぜですか。テンプレートクラスをさらに進めてください。だから私はバーをまったく知りません...

私はフロートを取得したいと思います。バーint。

私はクラスに対して1つ以上の暗黙的な変換を定義することができるので、扱いにくくなります。

struct FooBar { 
    operator float() const { 
    return 0; 
    } 

    operator int() const { 
    return 0; 
    } 
}; 

Not working live example.

したがって、すべてのすべてで、クラスの右の暗黙の会話の種類を取得することはできませんか?

+0

decltype()と自動? –

+0

*** decltype ***はバー、***は自動f =バー、***はバーです。 – Viatorus

+0

バーb; decltype((int)b)x =(int)b; –

答えて

-1
#include <iostream> 
#include <typeinfo> 
struct Bar { 
    operator int() const { 
     return 0; 
    } 
    operator double() const { 
     return 0.0; 
    } 

    struct Foo { 

    }; 
    operator Foo() const { 
     return Foo(); 
    } 
}; 
int main() { 
    std::cout << typeid(decltype((int)Bar())).name(); 
    std::cout << std::endl; 
    std::cout << typeid(decltype((double)Bar())).name(); 
    std::cout << std::endl; 
    std::cout << typeid(decltype((Bar::Foo)Bar())).name(); 
    std::cout << std::endl; 
} 

はその事実によると、その関数Bar::operator int()は、あなたがそれのためにthis参照があることを、保証クラスBarのメンバ関数であるので、私はすべてのもののためにデフォルトのオブジェクトBar()を提供理由です。

結果は次のとおりです。

i 
d 
N3Bar3FooE 
+0

'decltype((int)X)'は 'int 'と' bar'とは関係ありません... OPの質問は不明ですが –

+0

OPの質問は不明ですが、明らかにそうではありません。何でも::演算子int() "暗黙のコンバージョンについて誰かが答えてもいいと思う。 – Pleeea

+0

私は私の質問を編集する。あなたが今私を理解しているかどうか見てください。私はバーを知っていないので、(C) - キャストは不可能です。 – Viatorus

関連する問題