有没有办法在c++中模拟元编程?
Is there any way to emulate meta programming in C++?
是否有办法在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。预处理器不应该过度使用,因为这将再次成为糟糕的风格宏可能非常有用,但我尽量避免使用它们。
相关文章:
- 如何使用Google Mock来模拟gettimeofday()
- 有一个打印语句的函数是一种糟糕的编程实践吗
- G锁定铸造到基础上会释放模拟行为
- 有什么好的方法可以让系统调用代理允许在单元测试中进行模拟
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- 落砂模拟碰撞检测C++和SFML
- 在gtest.中使用fff.h模拟系统API
- 模板元编程:如何将参数包组合成新的参数包
- 谷歌模拟和覆盖关键字
- TeamViewer 如何以编程方式在 Windows 上模拟 Ctrl-Alt-Del?
- 模拟到数字cplus加编程
- 使用编程语言模拟外围设备的行为
- C++编程双骰子游戏模拟
- 如何以编程方式模拟与控制台的交互
- 有没有办法在c++中模拟元编程?
- 如何在64位窗口中以编程方式模拟DllMain调用
- 在Java或C++等编程语言中有效地模拟SQL的group by子句,而不是求助于RDBMS
- 以编程方式模拟 Alt + Enter 按键不起作用
- 如何以编程方式(在C/ c++中)模拟DOS中的击键
- 如何开始为学校项目编程3D模拟