有没有办法在c++中模拟元编程?

Is there any way to emulate meta programming in C++?

本文关键字:模拟 编程 c++ 有没有      更新时间:2023-10-16

是否有办法在c++中模拟元编程?(c++非c++11标准)对于Python堆栈建议(使用元类生成特定的名称属性)我创建类似的,它工作

class FooMeta(type):
    def __init__(cls, name, bases, dct):
        super(FooMeta, cls).__init__(name, bases, dct)
        for n in range(100):
           setattr(cls, 'NUMBER_%s'%n, n)
class Bar(object):
    __metaclass__ = FooMeta

但我也需要在c++中相同的类,类与n静态常量int NUMBER_some_number字段。如何在没有硬编码的情况下创建这个

在Python中,命名前几百个整数可能会有一点性能优势,因为典型的实现只缓存几百个整数,并且仍然需要查找它们。

在c++中,整数不是动态对象,所以没有问题,也没有优势。

在c++中,元编程现在通常通过使用模板机制来完成。在引入宏之前,人们使用宏来生成代码。但是,由于您正在解决的Python问题在c++中不存在,因此没有意义。

为"干杯! "Alf"指出,当你在c++中做同样的事情时,没有性能提升。此外,确实是绝对糟糕的样式,应该不惜一切代价避免。这就像根本不用c++编程一样。

如果出于某种原因你仍然无法避免这样做,你可以使用Boost。预处理:

#include <boost/preprocessor/iteration/local.hpp>
#define BOOST_PP_LOCAL_MACRO(n) 
    static const int NUMBER_ ## n = n;
// NOTE the valid range you can iterate over has to be a subset of [0, BOOST_PP_LIMIT_ITERATION]
#define BOOST_PP_LOCAL_LIMITS (0, 99)
class Bar
{
    public:
#include BOOST_PP_LOCAL_ITERATE()
};

您可以在调用

时看到展开的结果
g++ -E file.h

其中file.h是存放代码的文件

不过有一点要注意。比如Boost。预处理器不应该过度使用,因为这将再次成为糟糕的风格宏可能非常有用,但我尽量避免使用它们。