Pergunta

Suponha que eu tenho

 template< unsigned int num >
 class SomeFunctionality
 {
     static unsigned int DoSomething()
     {
         //...
     }

     static void DoSomethingElse()
     {
     }
 };

 typedef SomeFunctionality<6> SomeFunctionalityFor6;

Semanticamente, "SomeFunctionalityFor6" é essencialmente um namespace específico para o argumento de modelo, 6. Assim, no código usando essa instância do modelo em vez de fazer

 int main()
 {
       SomeFunctionalityFor6::DoSomething();
 }

Eu prefiro ter a capacidade de usar uma instrução "usando" ala um espaço de nomes reais

 int main()
 {
       using SomeFunctionalityFor6;
       DoSomething();
 }

Isso, como eu suspeito não funciona. visual studio reclama que quer um namespace definido pela palavra-chave "namespace" seguir qualquer instrução using.

Existe uma maneira de fazer o que estou tentando fazer? Principalmente eu só não quero que qualificar totalmente a toda namespace I chamar os métodos estáticos. Eu sei que é açúcar na maior parte apenas sintática, mas na minha opinião ele pode tornar o código mais legível. Eu estou querendo saber se há ainda maneiras de templatize um espaço de nomes diretamente, em vez de ter que usar a palavra-chave "class".

Foi útil?

Solução

Você não pode fazer isso. Nem namespace templatized, nem usando class_name.

Os únicos lugares do código que pode usar funções estáticas de uma classe sem qualificação são classes derivadas.

No seu caso, eu usaria um typedef para algum nome curto, como

int main()
{
       typedef SomeFunctionalityFor6 SF6;
       SF6::DoSomething();
}

Outras dicas

Ou você poderia apenas criar um objeto local ...

int main()
{
  SomeFunctionalityFor6  SF6;
  SF6.DoSomething();
}

Você pode substituir / mudar o SF6 objeto à vontade.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top