Здравствуйте, 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, все-таки.