Re[7]: А вот где, например, нужны
От: denaturat  
Дата: 05.09.06 05:17
Оценка:
Здравствуйте, Doc, Вы писали:

[]

Для врапперов COM-объектов. Если там уж есть свойства и методы, то должны быть и при обращении с ними использоваться свойства и методы.

Ну, вот написал я тут на досуге врапперры для MSXML, используя __declspec(property). Так теперь спокойно пишу типа так:

XmlNode node = doc.DocumentElement.ChildNodes.Item(0).LastChild;

Что, по моему, гораздо лучше портянок с многочисленными присваиваниями. Причем вместо проверок HRESULT сделал throw — так и приятнее, и проще — сунул все в try...catch и радуешься жизни.

Не спорю, есть возможность и такого:

XmlNode node = doc.get_DocumentElement().get_ChildNodes().get_Item(0).get_LastChild();

(компилятор так и раскрывает этот __declspec — через call, естественно). Однако, первый вариант более нагляден.
Да и не хочу я писать лишние четыре буквы и две скобки.


Да, господа! С помощью указанной в статье реализации такого не сделать (по крайней мере, у меня не вышло) — все работает только для простых типов, а вот тот же std::string в качестве типа свойства сложно использовать, например, это не сработает:


MyObject.stringProperty.c_str();


Надо только так обходиться:

string s = MyObject.stringProperty;
s.c_str();


Может, кто уже решил сию проблему, а то как-то на __declspec — Microsoft specific, все-таки.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.