2013-07-04 2 views
2

Я хотел иметь неявное преобразование на двух уровнях. Следующий фрагмент кода является прототипом проблемы, с которой я столкнулся.Вложенное неявное преобразование в C++

//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; 
} 

Я рассмотрел пример, приведенный в следующих ссылках, был убежден, что это достижимо.

How do conversion operators work in C++?

Operator overloading

ответ

6

стандарт допускает только один неявное преобразование с участием определенного пользователем типа. У вас две, следовательно, ошибка компиляции.

См 12,3/4

не более одного пользовательского преобразования (конструктора или функции преобразования) неявно применяется к одному значению.

+0

Получил это! Благодарю. – jazaman

Смежные вопросы