3

2 つのレベルで暗黙的な変換が必要でした。次のコード スニペットは、私が直面している問題のプロトタイプです。

//Sources
class A
{
public:
    void print()
    {
        std::cout <<"Class A"<< std::endl;
    }

    operator int()
    {
        return 1;
    }
};

class B
{
public:
    void print()
    {
        std::cout <<"Class B"<< std::endl;
    }

    operator A()
    {
        return A();
    }
};

class C
{
public:
    void print()
    {
        std::cout <<"Class C"<< std::endl;
    }
    operator B()
    {
        return B();
    }
};


void print_(A a)
{
    a.print();
}

//driver

int main( int argc, char* argv[] )
{
    C c;

    //print_( c ); // compilation error
    //print_( C() ); // compilation error   
    print_( c.operator framework::configuration::B() ); //when explicitly invoked it worked 
    return 0;
}

次のリンクで提供されている例を調べて、これが達成可能であると確信しました。

変換演算子は C++ でどのように機能しますか?

演算子のオーバーロード

4

1 に答える 1

7

標準では、ユーザー定義型を含む 1 つの暗黙的な変換のみが許可されます。2 つあるため、コンパイル エラーが発生します。

12.3/4を参照

多くても 1 つのユーザー定義の変換 (コンストラクターまたは変換関数) が暗黙的に単一の値に適用されます。

于 2013-07-04T06:35:53.860 に答える