这样的演员有可能吗?

时间:2012-09-28 16:00:15

标签: c++ type-conversion

int main() {

 class A {
    public:
    static double test_code(const A& a);
  };

   class B : public A {
   public:
   B(int i) { };
   static double test_code2(const B& b);
   };

A::test_code(2);
B::test_code2(2);

return 0;

}

cf:http://ideone.com/ilfE8

第一个方法调用不会编译,而第二个方法调用。有没有办法让这个转换工作?感谢

2 个答案:

答案 0 :(得分:2)

不,隐式类型转换无法完成。这有多种原因,更简单的是,为了成为一个选项,编译器必须在调用地知道所有可能的扩展A的类型,然后检查它们中的任何/所有类型是否可以从int隐式转换,解决潜在的歧义...请注意,从给定类型扩展的所有类型是一个开放集,可以在当前后扩展翻译单位已经建成!

您可以通过不同的方式实现类似的功能,例如创建一个获取int并返回A对象的函数,或者显式创建B。但它们都不允许隐式转换(即,不修改代码以明确请求转换路径)。

答案 1 :(得分:1)

编译好,

int main()
{
    class A {
    public:
        A(int i)
        {}
        static double test_code(const A& a) { return 0.0; }
    };

    class B : public A {
    public:
        B(int i)
            : A(i) {}
        static double test_code2(const B& b) { return 0.0; }
    };

    A::test_code(2);
    B::test_code2(2);

    return 0;
}