Существует ли какой-либо статически типизированный, строго скомпилированный язык, обеспечивающий функциональность для перебора членов типа во время компиляции и генерации шаблонного кода для каждого из них?Например, это может быть что-то вроде:
// in pseudo-C#
public static void AddParameter(string parameterName, object value) { /* ... */ }
public static void AddParameters<T>(T parameters) {
// Of course, the memberof(T), membersof(T), membername(<member>)
// and membervalue(<member>, object) operators would be valid
// inside a "compile for" block only
compile for (memberof(T) member in membersof(T))
AddParameter(membername(member), membervalue(member, parameters));
/* If this were actual C#, the "compile for" block could even have a where clause */
}
Итак, если был сделан следующий вызов:
StaticClass.AddParameters(new { UserID = "eleon", Password = "Gu3$$17" });
Тогда этот конкретный экземпляр AddParameters
будет развернут до
public static void AddParameters(InternalNameOfTheAnonymousType parameters) {
AddParameters("UserID", parameters.UserID);
AddParameters("Password", parameters.Password);
}
Во время компиляции (если это был фактический C # во время компиляции IL-to-native)