Trabalho implícito de tipos de valor

Conversão boxing dos tipos de valor foi alterado de gerenciado Extensions para C++ para Visual C++ 2008.

Design de linguagem, nós impostas uma posição filosóficas no lugar da experiência prática com o recurso e, na prática, era um erro.sistema autônomo uma analogia no original vários design de linguagem de herança, Stroustrup decidiu que não foi possível inicializar uma classe base virtual sub-objeto dentro de um construtor de classe derivada e, portanto, o idioma necessário que qualquer classe que serve sistema autônomo uma classe base virtual deve definir um construtor padrão.É esse construtor padrão que deve ser chamado por qualquer derivação virtual subseqüente.

O problema de uma hierarquia de classe base virtual é responsabilidade da inicialização do sub-objeto virtual compartilhado é deslocado com cada derivação subseqüente.Por exemplo, se eu defino uma classe base para qual inicialização requer a alocação de um buffer, o dimensionar especificado pelo usuário do buffer pode ser passado sistema autônomo um argumento para o construtor.Se, em seguida, eu fornecer dois derivações virtual subseqüentes, chamá-los inputb e outputb, cada um fornece um valor específico para o construtor de classe base. Agora, quando eu derivado um in_out classe de ambos inputb e outputb, nenhum desses valores para a classe base virtual compartilhada sub-objeto sensibly podem ser permitidos para avaliar.

Portanto, no design de linguagem original, Stroustrup não permitida a inicialização explícita de uma classe base virtual dentro da lista de inicialização de membro do construtor da classe derivada.Enquanto isso resolveu o problema, na prática, a incapacidade para direcionar a inicialização da classe base virtual provou impracticable.Keith Gorlen da National Institute de integridade, que tinha implementado uma versão de freeware da biblioteca de coleção SmallTalk chamada nihcl, foi uma voz princípio em convencer Stroustrup que ele tiveram de inventar um design mais flexível do linguagem.

Um princípio de design hierárquico orientada a objeto mantém que uma classe derivada deve interessem propriamente dito com o não-particular implementação de suas classes base imediatas.Para oferecer suporte a um projeto de inicialização flexível para herança virtual, Stroustrup precisou violar esse princípio.A classe derivada mais de uma hierarquia assume a responsabilidade para todos os inicialização sub-objeto virtual independentemente de como profundidade na hierarquia que ele ocorre.Por exemplo, inputb e outputb ambos são responsáveis por Inicializando explicitamente sua classe base virtual imediata. Quando in_out deriva de ambos inputb e outputb, in_out torna-se responsável a inicialização da classe base virtual uma vez removida e a inicialização explicitado dentro inputb e outputb é suprimida.

Isso fornece a flexibilidade necessária por desenvolvedores de linguagem, mas ao custo de uma semântica complicada.Essa sobrecarga de complicação será removida imediatamente se podemos restringir uma classe base virtual para ser sem estado e simplesmente permitir que ele especificar uma interface.Este é um idioma de design recomendado em C++.Dentro do CLR de programação, ele é gerado para diretiva com o tipo de interface.

Eis aqui um código simples sample– e nesse caso, é desnecessário conversão boxing explícita:

// Managed Extensions for C++ requires explicit __box operation
int my1DIntArray __gc[] = { 1, 2, 3, 4, 5 };
Object* myObjArray __gc[] = { 
   __box(26), __box(27), __box(28), __box(29), __box(30)
};

Console::WriteLine( "{0}\t{1}\t{2}", __box(0),
   __box(my1DIntArray->GetLowerBound(0)),
   __box(my1DIntArray->GetUpperBound(0)) );

sistema autônomo você pode ver, há muito conversão boxing em andamento.Em Visual C++ 2008, tipo de valor conversão boxing é implícita:

// new syntax makes boxing implicit
array<int>^ my1DIntArray = {1,2,3,4,5};
array<Object^>^ myObjArray = {26,27,28,29,30};

Console::WriteLine( "{0}\t{1}\t{2}", 0, 
   my1DIntArray->GetLowerBound( 0 ), 
   my1DIntArray->GetUpperBound( 0 ) );

Consulte também

Conceitos

Tipos de valor e seus comportamentos

Referência

Boxing IMPLICIT