如何在C++中注册动态成员

python中的魔术方法真的很神奇。例如:

class DynMember:

    def __getattr__(self, name: str):
        def fn(self, **kwargs):
            print(kwargs)

        setattr(self.__class__, name, fn)

        return lambda **x: fn(self, **x)

if __name__ == "__main__":
    d = DynMember()
    d.someFn(title="Greeting", description="Hello world!") # outputs {'title': 'Greeting', 'description': 'Hello world!'}
    d.someFn(k1="value 1", k2="value 2") # outputs {'k1': 'value 1', 'k2': 'value 2'}

有没有someFnDynMember类。该方法是使用__getattr__魔法方法和setattr内置方法在类上设置的。这些方法非常强大,让类在 python 中创造奇迹。(仅用 40 行代码编写了一个 html 生成器)。如何在 C++ 中实现类似的东西?

回答

C++ 尚不支持您想要的功能,有一些第三方库(如 Qt 或 Boost)提供了这些功能。但是(关于你到底想要什么的含糊不清)如果你想实现像def fn(self, **kwargs)你可以用可变参数函数(示例)或模板参数包(示例)或来自 C++20 的指定初始值设定项或std::map(如@alterigel 在 commnets 上提到的那样) )。


反射:

  • 如何向 C++ 应用程序添加反射?
  • C++ 反射

参数:

  • kwargs 喜欢与 Boost 的争论
  • 类似参数的 kwargs 的另一种实现

以上是如何在C++中注册动态成员的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>