Совершенно дурацкий вопрос.

Nov 16, 2007 17:47

На который положительно не жду никакого положительного ответа.

Вопрос вот: а нельзя ли перегрузить в C++ все, что нужно, таким образом, чтобы в возвращаемом значении получить граф выполнения программы?

Я думаю, нельзя.

вопрос, c++

Leave a comment

Comments 36

ded_flint November 16 2007, 15:09:08 UTC
что значит "перегрузить"?

Reply

thesz November 16 2007, 15:23:36 UTC
Операторы перегрузить, чтобы вместо if (cond) { th } else { el }, возвращался CIf(CCond(cond),CCodeBlock(th),CCodeBlock(el)).

Но я думаю, что это невозможно.

Reply

ded_flint November 16 2007, 17:33:13 UTC
не совсем понимаю что ты имеешь в виду под "возвращался", в смысле, кем возвращался, но может быть #define в помощь?

Reply

thesz November 17 2007, 13:46:00 UTC
#define if ? ;)

Мысль, конечно, но мало не покажется. ;)

Reply


nealar November 16 2007, 15:17:11 UTC
Не совсем всё можно перегрузить. То есть, этот способ подойдёт только для очень специальной программы. А очень специальная программа и сама может граф своего выполнения вывести.

Reply

thesz November 16 2007, 15:20:57 UTC
Да. И это меня огорчает. ;)

Reply


jtootf November 16 2007, 15:26:54 UTC
в общем случае нельзя, язык на это не расчитан. но сама по себе задача решаема путём построения DSL поверх C++ - через те же шаблоны выражений

Reply

thesz November 16 2007, 16:07:38 UTC
Ну, вот такую программу можно во что-то преобразовать:
tree*p find(int x,tree*p) {
tree*prevp = 0;
while (p) {
prevp = p;
if (x < p->x)
p = p->left;
else
p = p->right;
}
return prevp;
} /* find */?

Reply

jtootf November 16 2007, 16:30:21 UTC
можно. к сожалению сейчас убегаю, доступ к сети будет в понедельник - постараюсь не забыть вам ответить. прошу меня извинить, впереди ночь в дороге

Reply

thesz November 16 2007, 16:35:33 UTC
Ну хотя бы намек... ;)

Успехов!

Reply


alll November 16 2007, 15:39:23 UTC
Мало того, что не всё можно перегрузить, так ещё у некоторых операторов при перегрузке довольно нехорошо меняется порядок выполнения, насколько я помню.

Reply

thesz November 16 2007, 16:08:20 UTC
Да, за этим надо следить.

Бяда, короче. ;)

Reply

the_lazy_guy November 16 2007, 16:13:04 UTC
А можно в сторону этих нехороших операторов пальчиком показать?

Reply

alll November 16 2007, 16:22:13 UTC
Насколько я помню, у "родных" бинарных логических операторов "ленивый" порядок вычисления, у перегруженных всегда вычисляются оба операнда.

Reply


anonymous November 16 2007, 16:48:34 UTC
Нельзя. То, что можно, сделано в boost::lambda -- max630

Reply


Leave a comment

Up