问题标签 [metaprogramming]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
8 回答
1229 浏览

php - 代码生成缩进

通常,程序员编写的代码会生成其他代码。

(技术术语是元编程,但它比单纯的交叉编译器更常见;想想每个生成 HTML 的 PHP 网页或每个 XSLT 文件。)

我发现具有挑战性的一个领域是想出一些技术来确保手写源文件和计算机生成的目标文件都清楚地缩进以帮助调试这两个目标似乎经常相互竞争。

我发现这在 PHP/HTML 组合中特别具有挑战性。我认为这是因为:

  • 有时源文件中的 HTML 代码比生成的 PHP 代码多
  • HTML 文件往往比 SQL 语句长,需要更好的缩进
  • HTML 具有空间敏感特性(例如标签之间)
  • 结果是比 SQL 语句更公开可见的 HTML,因此做合理工作的压力更大。

您使用什么技术来解决这个问题?


编辑:我接受至少有三个论点不费心生成漂亮的 HTML 代码:

  • 增加了生成代码的复杂性。
  • 与浏览器渲染没有区别;开发人员可以使用 Firebug 或类似工具来很好地查看它。
  • 轻微的性能损失 - 增加了空白字符的下载时间。

我当然有时会生成代码而不考虑缩进(尤其是 SQL)。

然而,有一些论据推动了另一种方式:

  • 在实践中,我发现我确实经常阅读生成的代码——有额外的步骤来访问它是不方便的。
  • HTML 有时会遇到一些空间敏感问题。

例如,考虑以下代码:

它比下面的代码更清楚:

但是,由于 HTML 中包含空格,它也具有不同的呈现方式。

0 投票
2 回答
433 浏览

metaprogramming - Nemerle 宏的中缀格式

假设我需要一些非常特殊的乘法运算符。它可以在以下宏中实现:

我可以像这样使用它

及其工作。

但我真正想要的是我现在正在开发的 DSL 的一些类似“英语”的运算符:

如果我尝试像这样使用它

编译器因“预期;”而失败 错误

问题是什么?如何实现这个中缀格式的宏?

0 投票
12 回答
3661 浏览

c++ - 您在哪里找到有用的模板?

在我的工作场所,我们倾向于使用 iostreamstringvectormap和一两种奇数算法。实际上,我们还没有发现很多情况下模板技术是解决问题的最佳方案。

我在这里寻找的是想法和可选的示例代码,这些代码展示了您如何使用模板技术为您在现实生活中遇到的问题创建新的解决方案。

作为贿赂,期待您的回答获得赞成票。

0 投票
9 回答
28748 浏览

c# - 在 C# 中可以进行元编程吗?

特别是,是否有可能在编译时在 c# 中执行类似于此 c++ 代码的代码

0 投票
10 回答
9427 浏览

c++ - 您在 C++ 中看到的最酷的元编程示例是什么?

您在 C++ 中看到的最酷的元编程示例是什么?
您在 C++ 中看到过哪些元编程的实际用途?

0 投票
12 回答
2572 浏览

templates - D 模板:最酷的黑客

你用 D 编程语言做过或见过的最酷的、实用的元编程技巧是什么?有点实用意味着排除,例如,编译时光线追踪器。

0 投票
3 回答
2259 浏览

c++ - How to use boost::mpl to compose policies?

I have used something like the following to compose policies for my application:

The policy classes look like this:

To compose policies:

To use MyPolicy:

where they'd call:

and

Essentially, Cons constructs a type list here. It's pretty straight forward. However the typedef cons line is kinda ugly. It'll be ideal to have policy combiner that can do this:

Since we can have arbitrary number of policies, the CombinePolicy would need variadic template support in C++0x, which is only available experimentally in cutting edge compilers. However, it seems that boost:mpl library solved/worked around the problem by using a bunch preprocessing tricks. I guess I could use something like:

and then calls:

which would then use:

Obviously, I have a little trouble figuring out some_magic_lambda_expression here. I'm sure it's quite trivial for mpl experts here.

Thanks in advance.

0 投票
6 回答
10069 浏览

python - Python: wrapping method invocations with pre and post methods

I am instantiating a class A (which I am importing from somebody else, so I can't modify it) into my class X.

Is there a way I can intercept or wrap calls to methods in A? I.e., in the code below can I call

and get the output

Many TIA!

0 投票
4 回答
8987 浏览

c++ - 有没有办法做一个 C++ 风格的编译时断言来确定机器的字节顺序?

我有一些模板化的低级序列化代码,我显然需要在编译时知道系统的字节序(因为模板专门基于系统的字节序)。

现在我有一个带有一些平台定义的标题,但我宁愿通过一些模板化测试(如 static_assert 或 boost_if)做出关于字节顺序的断言。原因是我的代码需要在各种机器、许多专业供应商的机器上编译和运行,并且可能在 2008 年不存在的设备上运行,所以我真的无法猜测到那个标题年份可能需要什么在路上。由于代码库的预期寿命约为 10 年。所以我不能永远遵循代码。

希望这能说明我的情况。

那么有没有人知道可以确定字节顺序的编译时测试,而不依赖于供应商特定的定义?

0 投票
6 回答
19462 浏览

ruby - Ruby 中的 method_missing 陷阱

method_missing在 Ruby 中定义方法时有什么需要注意的地方吗?我想知道继承、异常抛出、性能或其他方面是否存在一些不那么明显的交互。