Здравствуйте, Evgeny.Panasyuk, Вы писали:
EP>Здравствуйте, Serginio1, Вы писали:
EP>>>>>Как раз таки проблема в языках, об этом и речь. Высокоуровневый C++ быстрый отнюдь не только потому что для него оптимизаторы лучше, а во многом потому что в самом языке есть бесплатные, или практически бесплатные абстракции и высокоуровневые инструменты.
S>>>> В C# еще больше. Посмотри на тот же Code First и Linq. Я без слез не могу смотреть на код С++ которые через COM вызывают 1С работая с Idispatch.
PM>>>Не в первый раз наблюдаю, что при сравнении С++ с другими, более поздними языками, люди активно не использующие С++ приводят примеры кода 10-15 летней давности (MFC, COM). Причем уже в то время в Visual C++ была средства для нормальной работы с COM (ATL, #import, позже _com_ptr_t) которые позволяли писать код без многоэтажных if(SUCCEEDED()) AddRef/Release.
S>> С голым Idispatch без библиотеки типов? В C# для этого есть dynamic.
EP>Опиши конкретный use-case.
http://devtrainingforum.v8.1c.ru/forum/thread.jsp?id=614821&threadtype=0&print=1&partt614821=1
EP>Если нужно вызвать метод с произвольным именем (method) и произвольным количеством аргументов (a1, a2, ...), без всякого предварительного описания — то можно например вот так:
EP>EP>Dynamic x = ...;
EP>x.call("method", a1, a2, ...);
EP>// or
EP>x("method", a1, a2, ...);
EP>// or
EP>x > "method"_(a1, a2, ...);
EP>
А если заранее описать список возможных имён методов, то можно и так:
EP>EP>x.method(a1, a2, ...)
EP>
Но согласись все равно убожество. Читать такой код неудобно.
На C# Сделать прокси легко. Вот например как обернуть в Idispatch любой объект .Net
http://infostart.ru/public/238584/
Есть DynamicObject, expandoobject все очень красиво
Кстати про инлайн
http://stackoverflow.com/questions/23374815/creating-inline-functions-and-macros
http://aakinshin.net/ru/blog/dotnet/inlining-and-starg/