【发布时间】:2011-11-13 23:35:46
【问题描述】:
是否有任何具有代码模板形式的语言?让我解释一下我的意思...我今天正在处理一个 C# 项目,其中我的一个类非常重复,包含一系列属性 getter 和 setter。
public static int CustomerID
{
get
{
return SessionHelper.Get<int>("CustomerID", 0); // 0 is the default value
}
set
{
SessionHelper.Set("CustomerID", value);
}
}
public static int BasketID
{
get
{
return SessionHelper.Get<int>("BasketID", 0); // 0 is the default value
}
set
{
SessionHelper.Set("BasketID", value);
}
}
... and so forth ...
我意识到这基本上可以分解为一个类型、一个名称和一个默认值。
看到这篇文章,和我预想的差不多,但是没有参数的余地(默认)。
但我在想,很多时候代码会分解成模板。
例如,语法可以这样:
public template SessionAccessor(obj defaultValue) : static this.type this.name
{
get
{
return SessionHelper.Get<this.type>(this.name.ToString(), defaultValue);
}
set
{
SessionHelper.Set(this.name.ToString(), value);
}
}
public int CustomerID(0), BasketID(0) with template SessionAccessor;
public ShoppingCart Cart(new ShoppingCart()) with template SessionAccessor; // Class example
我觉得这在编写简洁、干燥的代码方面有很多可能性。这种类型的事情在 c# 中通过反射可以实现,但是速度很慢,应该在编译期间完成。
那么,问题:任何现有的编程语言都可以实现这种类型的功能吗?
【问题讨论】:
-
对我来说听起来像是 T4 的工作......
-
C++ 的模板接近你想要的:cplusplus.com/doc/tutorial/templates
-
如果您主要关心的是输入样板文件的乏味(而不是更改样板文件的可能性),Resharper 有一个很好的实时模板功能,它确实有助于解决这个问题。 T4 更强大(您可以更新模板定义并使用更新的模板重新生成文件),但它也增加了一些额外的复杂性。 Vanilla VS 有代码片段,也可以提供帮助。
标签: c# templates programming-languages metaprogramming