[.NET][VC++][Attributes] Синтаксический сахар
От: WoldemaR Россия  
Дата: 20.04.06 07:48
Оценка: 8 (1)
// Tools.h
////////////////////////////////////////////////////////////////////////////
#pragma once


////////////////////////////////////////////////////////////////////////////
/// Шаблонный класс извлечения атрибутов
template <typename TAttribute>
public ref class AttPtr
{
    TAttribute^ attribute;

public:
    /// Конструктор для объектов
    AttPtr(System::Object^ obj) : 
        attribute(safe_cast<TAttribute^>(
            Attribute::GetCustomAttribute(obj->GetType(), TAttribute::typeid)))
    {    }

    operator TAttribute^()
    {    return attribute;    }

    TAttribute^ operator->()
    {    return attribute;    }
};

/// Макрос для обращения к атрибуту
#define ATTRIBUTE(name) AttPtr<name##Attribute>


/// <sample>
/// <standart variant>
///        MyAttribute^ a = safe_cast<MyAttribute^>(Attribute::GetCustomAttribute(obj->GetType(), MyAttribute::typeid))));
///        if (a){}
/// </standart variant>
/// <new variant>
///        if (ATTRIBUTE(My) a = obj){}
/// </new variant>
/// </sample>


////////////////////////////////////////////////////////////////////////////
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.