[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

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: