Prova sinstassi C++/CLI

Ho scritto un file per il syntax highlighting di Code Snippet Editor destinato al nuovo linguaggio C++/CLI.

Come vi sembrano i colori? Sicuramente non è perfetto ma per iniziare può andare bene.

A proposito... se non conoscete le novita del nuovo linguaggio che sarà rilasciato con Whidbey, date un'occhiata al codice. Presto scriverò un articolo in merito...

Credo che il mio rapporto con C# stia per finire... dopo soli 3 mesi...

Ecco un piccolo esempio (non mostra proprio tutti tutti i costrutti... ma non volevo esagerare).

PS Scusate, lo riposto scrollabile perchè mi sembrava un po' da cafoni occupare tutta la pagina dei nuovi post

#using <mscorlib.dll>
#using <System.dll>

#pragma managed

using namespace 
System;

namespace Example {
    
    
/* Customer data.
 * Inherits from System::ValueType.
 */
public value struct CustomerKey: IComparable<CustomerKey^>
{
    
public:
    
    
CustomerKey (StringfirstNameStringlastName):
        
FirstName (firstName),
        
LastName (lastName)
    {
    }
    
    
StringFirstName;
    
StringLastName;

    
bool Equals (CustomerKeykeyoverride
    
{
        
bool firstNameResult this->FirstName->Equals (key->FirstName);
        
bool lastNameResult this->LastName->Equals (key->LastName);

        
return (firstNameResult && lastNameResult);
    }

    
int CompareTo (CustomerKeykeyoverride
    
{
        
return Equals (key);
    }
    
};

/* Customer.
 * Inherits from System::Object.
 */
public ref class Customer
{

private:
    
initonly CustomerKey key_;
    
public:

    
Customer (CustomerKey key)
    {
        
key_ key;
    }

    
Customer (StringfirstNameStringlastName)
    {
        
if (firstName == nullptrthrow gcnew ArgumentNullException ();
        
if (lastName == nullptrthrow gcnew ArgumentNullException ();

        
key_ CustomerKey (firstNamelastName);
    }

    
property CustomerKeyKey
    
{
        
CustomerKey^ get () { return key_; }
    }

    
property StringFirstName
    
{
        
String^ get () { return key_.FirstName; }
    }
    
    
property StringLastName
    
{
        
String^ get () { return key_.LastName; }
    }

    
StringToString () override
    
{
        
Stringkey_.FirstName;

        
return s;
    }

};

typedef System::Collections::Generic:ictionary<CustomerKey^, Customer^> CustomerDictionary;

typedef System:iagnostics:ebug Debug;

public ref class CustomerContainer 
{
    
CustomerDictionarycustomers_;

public:
    
CustomerContainer ()
    {
        
customers_ gcnew CustomerDictionary ();
    }
    
    
void Insert (StringfirstNameStringlastName)
    {
        
try 
        
{
            
Customercustomer gcnew Customer (firstNamelastName);
            
customers_->Add (customer->Keycustomer);

            
Debug::WriteLine ("Inserted: %s"customer->ToString ());
        }
        
catch (Exceptionexception)
        {
            
Debug::WriteLine (exception->Message);
            
throw;
        }
    }

};

}

using namespace Example;

/* Entry point of the application.
 * It should be in the default namespace!
 */
int main () {
    
    
StringhelloWorld "Hello world!";

    
CustomerContainercontainer gcnew CustomerContainer ();

    
container->Insert ("Andrea""Sansottera");
    
    
return 0;
}

Print | posted on venerdì 25 febbraio 2005 21:53