Re: kylix 2
Evening, Vlad.
Vlad Harchev <hvv@hippo.ru> 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: adept@umc.com.ua
GPG KeyID/fprint: F5D7639D/CA36 E6C4 815D 434D 0498 2B08 7867 4860 F5D7 639D
Reply to: