C++中的嵌套隐式转换

Nested implicit conversion in C++

本文关键字:转换 嵌套 C++      更新时间:2023-10-16

我希望在两个级别中进行隐式转换。下面的代码片段是我所面临问题的原型。

//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++中是如何工作的?

操作员过载

标准只允许一个涉及用户定义类型的隐式转换。您有两个,因此出现编译错误。

见12.3/4

最多将一个用户定义的转换(构造函数或转换函数)隐式应用于单个价值