如何在 C++ 中实现元类?

alv*_*tar 2 c++ metaclass

我已经阅读了一些关于什么是元类的内容,但我想知道它们是否可以在 C++ 中实现。

我知道 Qt 库正在使用 MetaObjects,但它使用 C++ 的扩展来实现它。我想知道是否可以直接用C++实现。

谢谢。

Tho*_*day 5

如果元类的工作定义是“实例化本身就是类的语言实体”,那么泛型就是 C++ 中的元类:

#include <iostream>
using namespace std;

template <typename T>
class Meta {
public:
    Meta(const T&init) : mData(init) {}
// ...
private:
    T mData;

};

int main(int, char **) {
  cout << "The size of Meta<double> is " << sizeof(Meta<double>) << endl ;
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

在倒数第二行中使用 Meta<double> 会强制编译器实例化 Meta<double> 类;sizeof 运算符对 Meta 进行操作,从而表明这不仅仅是语义糖并且该类已被实例化。即使没有实例化 Meta 类型的对象,程序也已完成。