【问题标题】:C++ Convert static method to simple methodC ++将静态方法转换为简单方法
【发布时间】:2020-10-03 03:19:40
【问题描述】:

这是我写的。

class A {   };

class B : public A
{
public:
    static B Convert(const A &a) { return static_cast<const B&>(a); }
};

int main()
{
    A a;
    B b = B::Convert(a);
}

但是我想要这个,你知道怎么做吗?

B b = a.Convert();

提前感谢您的回答! ^^

【问题讨论】:

  • 似乎您被要求为B 编写一个以A 为参数的构造函数。我不清楚这个问题的意义是什么。
  • 我只想写这个 B b = B::Convert(a);这种形式 B b = a.Convert();
  • 这在有效的 C++ 中是不可能的。由于 A 是 B 的基类,因此无法从 A 转换为 B。请注意,您现有的代码也是无效的。

标签: c++ methods static


【解决方案1】:

通常我会说,不要这样做。使用dynamic_cast&lt;B*&gt;(&amp;a) 代替See this post

但是如果你可以检查a是否属于B类型,你可以如下实现:

class A {
    // ...
    B& Convert() { return return static_cast<B&>(*this); }
}

但是要非常小心地检查这是否是一个有效的转换,否则你可能会在运行时得到未定义的行为!!!

【讨论】:

    猜你喜欢
    • 2011-11-17
    • 2010-10-30
    • 1970-01-01
    • 1970-01-01
    • 2010-09-16
    • 2011-05-24
    • 2013-03-12
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多