Я только что прочитал статью "Идиоматическое программирование" , и он попытался подчеркнуть важную концепцию: язык не должен диктовать, как вы решаете проблему, скорее вы должны диктовать, как язык должен решатьпроблема.
В качестве примера автор выбрал препроцессор C / C ++ для выполнения двух действий:
Обеспечение согласованности
Добавить синтаксис и грамматику к существующему языку.
Теперь я знаю, что эта статья относится как минимум к 2003 году и использует C язык, но я видел, как другие люди использовали по крайней мере пункт 1. раньше (например, Ogre 3D).
В приведенном примере:
#define property(name, type) : \
type m##name; \
public: \
type name() \
{ return m##name; } \
void name(type t__##name) \
{ m##name = t__##name; }
используется так:
class MyClass
{
protected property(age, unsigned short);
private property(gpa, float);
private: // Other stuff can go here
};
Помимо того, что макросы являются злом, и мы должны использовать современные варианты C ++, насколько мне известно, не существует подходящего альтернативного решения, и я считаю, что именно такие вещи были созданы Boost.Wave и Boost.Preprocessor.уточнить и улучшить.
Я считаю, что в этом есть некоторые достоинства, но я хотел бы узнать от людей, которые использовали / видели это, что вы думаете?Есть ли у автора точки и пример все еще достоинства, или это что-то, что нужно прочитать, принять к сведению и спрятать как интересный лакомый кусочек?
РЕДАКТИРОВАТЬ
Спасибо за ответы!
Я хочу быстро уточнить природу вопроса.Это не «Этот пример хорошо использовать или нет?»вопрос, это пример типа изменений и расширений, которые автор предлагает обогатить или усовершенствовать существующий язык.Поэтому возникает вопрос: допустимо ли злоупотреблять препроцессором для добавления языковых расширений и обеспечения согласованности на основе примера этого и других фрагментов макроса?