标签: metaprogramming

用于生成编程的非C++语言?

C++可能是静态元编程最流行的语言,Java不支持它.

除了C++之外还有其他语言支持生成编程(创建程序的程序)吗?

lisp haskell boo metaprogramming clojure

24
推荐指数
7
解决办法
3600
查看次数

修改django中的默认查询集

我在模型中添加了"已取消"字段,有没有办法将模型默认查询修改为cancelled = False?无需修改我的所有过滤/排除查询?

python django metaprogramming django-models

24
推荐指数
1
解决办法
8358
查看次数

提取属性名称的安全方法

我正在寻找一种方法来获取具有类型检查的对象属性名称,以便在重构后捕获可能的回归.

这是一个例子:我必须将属性名称作为字符串传递的组件,如果我将尝试更改模型中的属性名称,它将被破坏.

interface User {
   name: string;
   email: string;
}

class View extends React.Component<any, User> {

   constructor() {
      super();
      this.state = { name: "name", email: "email" };
   }

   private onChange = (e: React.FormEvent) => {
      let target = e.target as HTMLInputElement;
      this.state[target.id] = target.value;
      this.setState(this.state);
   }

   public render() {
      return (
         <form>
            <input
               id={"name"}
               value={this.state.name}
               onChange={this.onChange}/>
            <input
               id={"email"}
               value={this.state.email}
               onChange={this.onChange}/>
            <input type="submit" value="Send" />
         </form>
      );
   }
}
Run Code Online (Sandbox Code Playgroud)

如果有任何好的解决方案来解决这个问题我会很感激.

reflection metaprogramming typescript

24
推荐指数
2
解决办法
2万
查看次数

什么是Ruby中的"for"

在Ruby中:

for i in A do
    # some code
end
Run Code Online (Sandbox Code Playgroud)

是相同的:

A.each do |i|
   # some code
end
Run Code Online (Sandbox Code Playgroud)

for 不是内核方法:

  • for红宝石究竟是什么" "
  • 有没有办法使用其他关键字来做类似的事情?

就像是:

 total = sum i in I {x[i]}
Run Code Online (Sandbox Code Playgroud)

映射到:

 total = I.sum {|i] x[i]}
Run Code Online (Sandbox Code Playgroud)

ruby metaprogramming

23
推荐指数
3
解决办法
7769
查看次数

动态更新ModelForm的Meta类

我希望从我的视图中动态更新ModelForm的内联Meta类.尽管此代码似乎更新在Meta类中的排除列表,从输出as_p(),as_ul()等不反映更新的Meta排除.

我假设在创建ModelForm时不是在as_*()调用时生成html .有没有办法强制更新HTML?

这甚至是最好的方法吗?我只是假设这应该工作.

思考?

from django.forms import ModelForm

from testprogram.online_bookings.models import Passenger

class PassengerInfoForm(ModelForm):

    def set_form_excludes(self, exclude_list):
        self.Meta.exclude = excludes_list

    class Meta:
        model = Passenger
        exclude = []
Run Code Online (Sandbox Code Playgroud)

python django metaprogramming django-forms modelform

23
推荐指数
2
解决办法
1万
查看次数

你如何在c ++中调试重度模板化的代码?

在使用C++模板元编程时,我发现很难弄清楚我的代码有什么问题.可能我不是很擅长理解错误消息,但据我所知,我不能诉诸于打印语句或断点来弄清楚发生了什么.

在尝试找出为什么没有编译的东西时,您可以提供哪些提示或建议,而不仅仅是手动选择代码并希望它来找我?

c++ debugging templates metaprogramming

23
推荐指数
4
解决办法
6996
查看次数

在C++中模板化'for'循环?

我在下面有一个带有运行时for循环的C++代码段,

for(int i = 0; i < I; i++)
  for (int j = 0; j < J; j++)
    A( row(i,j), column(i,j) ) = f(i,j);
Run Code Online (Sandbox Code Playgroud)

该片段被重复调用.循环边界'I'和'J'在编译时是已知的(I/J是2到10的顺序).我想以某种方式使用模板展开循环.主要的瓶颈是row()和column()以及f()函数.我想用使用row<i,j>::enum技巧在编译时评估的等效元程序替换它们.

我真正喜欢的是最终将循环解析为一系列语句的东西,例如:

A(12,37) = 0.5;
A(15,23) = 0.25;
A(14,45) = 0.25;
Run Code Online (Sandbox Code Playgroud)

但是我想这样做而不会破坏for- for结构太多.本着精神:

TEMPLATE_FOR<i,0,I>
  TEMPLATE_FOR<j,0,J>
     A( row<i,j>::value, column<i,j>::value ) = f<i,j>::value
Run Code Online (Sandbox Code Playgroud)

可以提升:: lambda(或其他东西)帮我创建吗?

c++ optimization templates metaprogramming

23
推荐指数
4
解决办法
1万
查看次数

编译时__FILE__宏操作处理

我在将一些东西从Solaris移植到Linux时遇到的一个问题是Solaris编译器__FILE__在预处理过程中将宏扩展为文件名(例如MyFile.cpp),而Linux上的gcc扩展到完整路径(例如/ home /用户/ MYFILE.CPP).使用basename()可以很容易地解决这个问题但是......如果你经常使用它,那么对basename()的所有调用都必须加起来,对吧?

这是问题所在.有没有办法使用模板和静态元编程,在编译时运行basename()或类似的?由于它__FILE__是常量且在编译时已知,因此可能更容易.你怎么看?可以吗?

c c++ templates metaprogramming

23
推荐指数
7
解决办法
9474
查看次数

是否可以使用模板元编程创建和初始化值数组?

我希望能够在编译时使用模板元编程创建一个计算值数组(为了简单起见,我希望每个值都是它的索引的平方).这可能吗?如何初始化数组中的每个位置?

(是的,有更简单的方法可以在不使用模板元编程的情况下执行此操作,只是想知道是否可以使用数组执行此操作.)

c++ metaprogramming

23
推荐指数
4
解决办法
1万
查看次数

Swift:__attribute的宏__((section))

这是一个奇怪的,非Swift-thonic的问题,所以请耐心等待.
我想在Swift中做类似于我目前在Objective-C/C++中所做的事情,所以我将从描述它开始.

我有一些现有的C++代码定义了一个宏,当在代码中的任何地方使用表达式时,它会在编译时将一个条目插入到二进制文件的表中.换句话说,用户写这样的东西:

#include "magic.h"

void foo(bool b) {
    if (b) {
        printf("%d\n", MAGIC(xyzzy));
    }
}
Run Code Online (Sandbox Code Playgroud)

并感谢定义

#define MAGIC(Name) \
  []{ static int __attribute__((used, section("DATA,magical"))) Name; return Name; }()
Run Code Online (Sandbox Code Playgroud)

在编译时实际发生的是创建一个名为(modulo name-mangling)的静态变量xyzzy并将其分配到magical我的Mach-O二进制文件的特殊部分中,因此运行nm -m foo.o转储符号会显示如下内容:

0000000000000098 (__TEXT,__eh_frame) non-external EH_frame0
0000000000000050 (__TEXT,__cstring) non-external L_.str
0000000000000000 (__TEXT,__text) external __Z3foob
00000000000000b0 (__TEXT,__eh_frame) external __Z3foob.eh
0000000000000040 (__TEXT,__text) non-external __ZZ3foobENK3$_0clEv
00000000000000d8 (__TEXT,__eh_frame) non-external __ZZ3foobENK3$_0clEv.eh
0000000000000054 (__DATA,magical) non-external [no dead strip] __ZZZ3foobENK3$_0clEvE5xyzzy
                 (undefined) external _printf
Run Code Online (Sandbox Code Playgroud)

通过魔术getsectbynamefromheader() …

metaprogramming mach-o swift swift2

23
推荐指数
1
解决办法
795
查看次数