子类包含基类使用的静态成员

subclass contains a static member that base class uses

本文关键字:静态成员 包含 基类 子类      更新时间:2023-10-16

在C++11中,有没有办法在(抽象)基类构造函数访问的子类中定义静态成员变量?我尝试过扰乱初始化列表,并尝试设置一个指向该静态子类成员的非静态基类指针,但没有成功。我开始认为我必须为每个子类编写一个单独的构造函数,这样我才能做到这一点。有什么想法吗?

您可以将子类类型作为模板参数传递给基类:

#include <iostream>
template <typename Derived>
struct Base
{
    Base()
    {
        std::cout << Derived::value << std::endl;
    }
};
struct Foo : Base<Foo>
{
    static const std::size_t value = 100;
};
struct Bar : Base<Bar>
{
    static const std::size_t value = 999;
};
int main()
{
    Foo baseFoo;
    Bar baseBar;
}

实例