如何填充循环模板派生类的静态成员
How to populate static members of recurring template derived class?
我有这个类(裸露版本):
class Background : public QObject
{
Q_OBJECT
public:
static const QMetaObject *index(const QString &name) { return m_indexes.value(name, nullptr); }
static const QList<QString> names() { return m_indexes.keys(); } }
protected:
explicit Background(QObject *parent = nullptr) : QObject(parent) {}
private:
static const QMap<QString, const QMetaObject *> m_indexes;
};
因为我将很少有其他具有完全相同基础结构的类,所以多态性是显而易见的,但我需要的是每个派生类唯一的static const m_indexes
,我发现我可以使用循环模板来完成我需要的事情,但我找不到如何在编译时"填充"我唯一的静态 const 成员。
template<class T>
class Base {
// ...
static const QMap<QString, const QMetaObject *> m_indexes;
}
template<class T> const QMap<QString, const QMetaObject *> Base<T>::m_indexes;
这是我从 CRTP 得到的,但它会以相同的方式初始化它们,我如何在每个派生类中m_indexes
具有唯一的条目。?
大致如下:
class Background : public QObject, public Base<Background>
{
Q_OBJECT
public:
explicit Background (QObject *parent = nullptr) :
QObject(parent), Base<Background>() {}
};
const QMap<QString, const QMetaObject *> Base<Background>::m_indexes = {
// ...
};
你需要定义静态变量,所以是的,对于每种类型,你需要用:
const QMap<QString, const QMetaObject *> Base<Background>::m_indexes = {/**/};
仅声明模板m_indexes
不会实例化符号,模板的旧问题也是如此!
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何使用基类指针引用派生类成员
- 如何在C++中使用非静态成员函数作为回调函数
- (C++)为什么静态成员可以在初始化之前使用
- 类的全局对象和静态成员
- 在作为静态成员包含在另一个类中的类的构造函数中使用 cout
- 模板化类中静态成员的延迟初始化
- 使用派生类中的静态成员而不是基类
- 继承:动态派生类成员与静态派生类成员
- 如何填充循环模板派生类的静态成员
- 静态成员变量在基本和派生类中具有相同名称
- 在派生类中缺少静态成员变量时强制编译错误
- C++-Do派生类继承基类的静态成员
- C++如何访问派生类中的基类静态成员
- c++如何在派生类中实现const静态成员
- 我需要通过基类静态变量访问派生类成员
- 如何在模板类型中强制静态成员初始化?或如何获取从模板类型派生的所有类的计数
- C++:在不同类的派生对象的基指针上调用静态成员函数
- 如何在具有不同命名空间的派生c++类中初始化模板静态成员
- 静态成员函数和派生类的问题