Tag: 元编程

以编程方式在C ++中以编程方式创build静态数组

我们可以在编译时定义一个静态数组,如下所示: const std::size_t size = 5; unsigned int list[size] = { 1, 2, 3, 4, 5 }; 问题1 – 是否可以通过使用各种元编程技术在编译时“编程”分配这些值? 问题2 – 假设数组中的所有值都是相同的,那么是否可以在编译时以编程的方式select性地赋值? 例如: const std::size_t size = 7; unsigned int list[size] = { 0, 0, 2, 3, 0, 0, 0 }; 欢迎使用C ++ 0x的解决scheme arrays可能相当大,几百个元素长 现在的数组将只包含PODtypes 也可以假定数组的大小将以静态编译时兼容的方式预先知道。 解决scheme必须在C ++ (没有脚本,没有macros,没有基于pp或代码生成器的解决scheme) 更新:格鲁吉亚Fritzsche的解决scheme是惊人的,需要一点工作,以编译MSVC和英特尔编译器,但仍然是一个非常有趣的方法来解决这个问题。

类名的dynamic类定义

如何在Ruby中dynamic定义一个类名称? 我知道如何dynamic创build一个没有名字的类,像这样: dynamic_class = Class.new do def method1 end end 但是你不能指定一个类名。 我想用名字dynamic创build一个类。 这是我想要做的一个例子,当然它实际上并不工作。 (请注意,我不是创build一个类的实例,而是一个类的定义) class TestEval def method1 puts "name: #{self.name}" end end class_name = "TestEval" dummy = eval("#{class_name}") puts "dummy: #{dummy}" dynamic_name = "TestEval2" class_string = """ class #{dynamic_name} def method1 end end """ dummy2 = eval(class_string) puts "dummy2: #{dummy2}" # doesn't work 实际产出: […]

Ruby:define_method与def

作为编程练习,我编写了一个创build类的Ruby片段,实例化该类中的两个对象,monkeypatches一个对象,并依靠method_missing来monkeatch另一个对象。 这是交易。 这按预期工作: class Monkey def chatter puts "I am a chattering monkey!" end def method_missing(m) puts "No #{m}, so I'll make one…" def screech puts "This is the new screech." end end end m1 = Monkey.new m2 = Monkey.new m1.chatter m2.chatter def m1.screech puts "Aaaaaargh!" end m1.screech m2.screech m2.screech m1.screech m2.screech 你会注意到我有一个method_missing的参数。 我这样做是因为我希望使用define_methoddynamic创build具有适当名称的缺less方法。 但是,它不起作用。 […]

如何将Ruby类名转换为下划线符号?

我如何以编程方式将类名称FooBar转换为符号:foo_bar ? 例如这样的事情,但是正确处理骆驼案件? FooBar.to_s.downcase.to_sym

在C ++和D中进行元编程

C ++中的模板机制只是偶然地对模板元编程有用。 另一方面,D的devise是为了方便这个。 显然这更容易理解(或者我听说过)。 我对D没有经验,但是我很好奇,在D中你能做什么,在模板元编程中你不能用C ++呢?

在Ruby中调用dynamic方法

据我所知,有三种方法可以在Ruby中dynamic调用方法: 方法1: s = SomeObject.new method = s.method(:dynamic_method) method.call 方法2: s = SomeObject.new s.send(:dynamic_method) 方法3: s = SomeObject.new eval "s.dynamic_method" 通过对它们进行基准testing,我确定方法1是最快的,方法2更慢,方法3是最慢的。 我也发现.send和.send都允许调用私有方法,而eval不。 所以我的问题是:是否有任何理由使用.send或eval ? 为什么你不总是只使用最快的方法? 这些调用dynamic方法的方法还有其他什么区别?

元编程有什么用?

我读了: 维基百科 代码生成与元编程 元编程的艺术 在c2.com上进行元编程 我承认在元编程/代码生成背后有一些困惑。 有没有人有他们使用元编程/代码生成的具体例子? 更好的解释是为什么它比另一个更好。 编辑 : 蓟会被视为元编程?

列出在PostgreSQL中引用表的存储函数

只是一个简单而快速的问题:在PostgreSQL中,如果可能的话,如何使用一个只使用SELECT语句的表列出所有存储的函数/存储过程的名称? 如果一个简单的select是不够的,我可以做一个存储的function。 我想,我的问题与这个问题有点类似,但是这个问题是针对SQL Server 2005的: 表的存储过程列表 (可选)对于这个问题,你如何列出使用相同表格的触发器和约束条件?

元编程究竟是什么?

我正在阅读TheServerSide上关于Java平台上的ployglot编程的文章。 文章中的一些评论将元编程称为生成代码的能力(也许是即时的)。 元编程能够在运行中生成代码,或者是在运行时将方法和属性注入现有对象的能力(如Python,Ruby和Groovy允许的一些dynamic语言)。

为什么我尝试使用显式types参数调用模板成员函数时出错?

我不明白,在我看来,对f的调用是完全明确的,但是expected primary-expression before 'int'没有用expected primary-expression before 'int'进行编译。 如果我用f调用注释掉它,它编译好。 template<typename T> struct A { template<typename S> void f() { } }; template<typename T> struct B : A<T> { void g() { this->f<int>(); } };