相关疑难解决方法(0)

您可以将“this”静态转换为基类构造函数中的派生类,然后稍后使用结果吗?

我们在工作中的代码库中遇到了这种情况,并且我们就这是否是有效的 C++ 进行了激烈的争论。这是我能想到的最简单的代码示例:

template <class T>
class A {
public:
    A() { subclass = static_cast<T*>(this); }
    virtual void Foo() = 0;
protected:
    T* subclass;
};

class C : public A<C> {
public:
    C(int i) : i(i) { }
    virtual void Foo() { subclass->Bar(); }
    void Bar() { std::cout << "i is " << i << std::endl; }
private:
    int i;
};

int main() {
    C c(5);
    c.Foo();
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

这段代码在实践中 100% 有效(只要模板参数类型与子类类型匹配),但是如果我们通过运行时分析器运行它,它会告诉我们 是static_cast无效的,因为我们正在转换this为 a C* …

c++ constructor static-cast language-lawyer

6
推荐指数
1
解决办法
651
查看次数

标签 统计

c++ ×1

constructor ×1

language-lawyer ×1

static-cast ×1