Evening, Vlad. Vlad Harchev <[EMAIL PROTECTED]> 13:23 11/1/2003 wrote:
>> VH> Да, это можно используя свойство языка С++ - шаблоны. >> Можно попросить продемонстрировать? VH> Когда будут правильно написаны шаблоны, то использование будет иметь вид: VH> //с string VH> printf("It works: %s!\n", (make_overriden_function(str_function2, VH> string("blah"), string("bar"))) ("bar").c_str() ); При этом в качестве str_function2 я смогу использовать, например strstr, не так ли? :) Или мне сначала придется за-wrap-ить ее в объект? :) VH> Принцип реализации make_overriden_function и прочего: [skip] VH> //вспомогательная шаблонная ф-ия чтобы не приходилось всегда вручную задавать VH> //параметры шаблонов VH> template<class F,class A,class R> VH> overriden_function<F,A,R> make_overriden_function(F &f,const A& a, const R& r) VH> { VH> return overriden_function<F,A,R>(f,a,r); VH> } Да, придется. Особенно интересно, если реализация f написана не мной, для изменений недоступна и совсем ни разу не объект. Я хотел своим примером показать, как можно создать и вернуть сущность типа "функция". В твоем же примере возвращается нечто, ни разу не являющееся функцией. А syntactic sugar в виде перегруженного оператора "()" не делает, как не старайся, результат нормальной функцией. Конечно, я согласен - можно придумать свою систему шаблонов и "жить в ней", подтверждая утверждение о том, что любая достаточно сложная программма на C++ содержит половинчатую, глючную, не соответсвующую спецификациям реализацию лиспа :) Речь в начале треда, помимо прочего, шла еще и про объем кода и его читаемость/сопровождаемость..... VH> Еще пример использования ф-ии как об[екта: Скорее уж объекта как функции... [skip] VH> Я не хочу сказать что С++ лучше чем какие-либо языки, я просто хочу сказать, VH> что в С++ это тоже возможно, но часто в более громоздкой форме. К сожалению, VH> не все об этих возможностях С++ знают. Именно, в гораздо более громоздой форме. Может и хорошо, что лишь немногие об этих возможностях знают, и их используют. >> data Condition = Equals String String >> | NotEqual String String >> | StartsWith String String >> | Larger String String VH> Можно вопрос - а какая семантика у Condition? - отношение? В данной конкретной моей программе? Семантика простая: программа - компилятор/интерпретатор некоего языка XYZ, в котором отношения бывают четырех типов, указаных выше. Язык XYZ в качестве операндов отношений допускает только литералы. Тип Condition является представлением понятие "отношение". Семантика поведения понятия "отношение" тут никак не описана. VH> А что, поддержка отношений имеется на уровне языков? Не понял вопроса :( -- Dmitry Astapov //ADEpt E-mail: [EMAIL PROTECTED] GPG KeyID/fprint: F5D7639D/CA36 E6C4 815D 434D 0498 2B08 7867 4860 F5D7 639D