链接隐式转换运算符

时间:2011-12-22 22:40:35

标签: c++ c++11 implicit-conversion

我有一个类,我需要隐式转换为一些具有中间值的东西,例如。

struct outer {
    struct inner {
        operator T() { return T(); }
    };
    operator inner() { return inner(); }
};

如果我有这种结构,总是有效,例如

void f(T t);
outer o;
f(o);

2 个答案:

答案 0 :(得分:9)

§13.3.3.1.2 [over.ics.user] p1

  

用户定义的转换序列包括初始标准转换序列,然后是用户定义转换(12.3),然后是第二个标准转换序列。

注意单词“sequence”的单数和缺失。在隐式转换序列中,只会考虑一个用户定义的转换。

答案 1 :(得分:0)

这有效:

struct Foo {}; // renamed T in Foo to avoid confusion!

struct outer {
        struct inner {
                operator Foo() { return Foo(); }
        };

        operator inner() { return inner(); }

        template <typename T>
        operator T () {
                return operator inner();
        }
};

int main() {
        void f(Foo t);
        outer o;
        f(o);
}

但只是因为f没有超载,所以它不是真正的解决方案。