reticencias e && em c++
06/08/2017
0
Fala galera, eu estudei POO em java e recentemente fui estudar c++, porem estava vendo um video em inglês, não entendo bem o idioma e tive muitas dificuldades, assim como coisas que nunca sequer imaginei que existisse. e vim pedir que se pudessem, esclarecem minhas duvidas.
durante o video me deparei com a criação dessa função.
template<typename T,typename... TArgs>
T& addComponent(TArgs&&... mArgs){}
minhas duvidas são:
1- quando eu crio o template, qual a diferença de usar class T e typename T,?
2- o que significa reticencias.
3- e nesse caso dentro do parametro template, porque tem esse "typename... Targs" ?
4- porque o retorno é "T&" o que é esse T&?
5- e como paremetro de função, o que é "Targs&&... mArgs" denovo o que ser essas reticencias e esses dois &&??(obs: eu sei que dentro de condições quer dizer and)
obs: eu li em alguns artigos que reticencias em c++ queria dizer que viriam varios parametros, se for verdade como eu vou tratar esses varios parametros dentro da função?
durante o video me deparei com a criação dessa função.
template<typename T,typename... TArgs>
T& addComponent(TArgs&&... mArgs){}
minhas duvidas são:
1- quando eu crio o template, qual a diferença de usar class T e typename T,?
2- o que significa reticencias.
3- e nesse caso dentro do parametro template, porque tem esse "typename... Targs" ?
4- porque o retorno é "T&" o que é esse T&?
5- e como paremetro de função, o que é "Targs&&... mArgs" denovo o que ser essas reticencias e esses dois &&??(obs: eu sei que dentro de condições quer dizer and)
obs: eu li em alguns artigos que reticencias em c++ queria dizer que viriam varios parametros, se for verdade como eu vou tratar esses varios parametros dentro da função?
John Barboza
Curtir tópico
+ 0
Responder
Post mais votado
07/08/2017
Olá John, tudo bem?
É difícil se aprofundar em C++, visto que no Brasil essa é uma linguagem pouco utilizada (se comparada com outras linguagens como PHP, Java, C#). O inglês com certeza vai te ajudar bastante, mas eu vou tentar te indicar (pelo menos) o que você precisa pesquisar para entender melhor esse código. Daí você pode tentar encontrar material em português sobre esse tema.
1- quando eu crio o template, qual a diferença de usar class T e typename T,?
Quando você usa T está declarando que o tipo precisa ser integral, ou seja, conhecido em tempo de execução. Fazem parte desse conjunto os tipos fundamentais bool, char, char16_t, char32_t, wchar_t, short, int, long, long long. Procure na documentação de std::is_integral, lá tem uma lista completa.
Quando você usa typename TArgs, declara que um tipo deve ser usado. Usar typename é similar a usar class na programação com genéricos.
2- o que significa reticencias.
As reticências criam um variadic template, então para esse parâmetro você pode informar um ou mais objetos do tipo especificado. Lembra das varargs? Chegou a passar por esse recurso? Se não é melhor pesquisar sobre isso.
3- e nesse caso dentro do parametro template, porque tem esse "typename... Targs" ?
Explicado anteriormente ;)
4- porque o retorno é "T&" o que é esse T&?
Isso indica retorno por referência, em outras palavras o método retorna um ponteiro. Provavelmente o espaço de memória utilizado para alocar o retorno desse método foi a heap. Ele deve usar new, malloc, ou outro mecanismo de alocação dinâmica de memória.
5- e como paremetro de função, o que é "Targs&&... mArgs" denovo o que ser essas reticencias e esses dois &&??(obs: eu sei que dentro de condições quer dizer and)
Isso não tem a ver com lógica booleana, é como você declara ponteiros em C++. Esse por si só é um assunto muito extenso e existem várias formas de declarar ponteiro em C++, ou ponteiros para ponteiros, como o && indica.
Bom, espero ter ajudado :D Esse não é um código complicado, mas converge diversos assuntos diferentes. Vá por parte, quebrando um tópico de cada vez. Eu sugiro, fortemente, que antes de avançar nos seus estudos você faça uma pausa para praticar mais a programação genérica e, principalmente, a declaração e atribuição de ponteiros em C++, porque você vai ver gerenciamento de memória em todo lugar (Y)
Um abraço e boa jornada, com certeza ela será cheia de conhecimento XD
É difícil se aprofundar em C++, visto que no Brasil essa é uma linguagem pouco utilizada (se comparada com outras linguagens como PHP, Java, C#). O inglês com certeza vai te ajudar bastante, mas eu vou tentar te indicar (pelo menos) o que você precisa pesquisar para entender melhor esse código. Daí você pode tentar encontrar material em português sobre esse tema.
1- quando eu crio o template, qual a diferença de usar class T e typename T,?
Quando você usa T está declarando que o tipo precisa ser integral, ou seja, conhecido em tempo de execução. Fazem parte desse conjunto os tipos fundamentais bool, char, char16_t, char32_t, wchar_t, short, int, long, long long. Procure na documentação de std::is_integral, lá tem uma lista completa.
Quando você usa typename TArgs, declara que um tipo deve ser usado. Usar typename é similar a usar class na programação com genéricos.
2- o que significa reticencias.
As reticências criam um variadic template, então para esse parâmetro você pode informar um ou mais objetos do tipo especificado. Lembra das varargs? Chegou a passar por esse recurso? Se não é melhor pesquisar sobre isso.
3- e nesse caso dentro do parametro template, porque tem esse "typename... Targs" ?
Explicado anteriormente ;)
4- porque o retorno é "T&" o que é esse T&?
Isso indica retorno por referência, em outras palavras o método retorna um ponteiro. Provavelmente o espaço de memória utilizado para alocar o retorno desse método foi a heap. Ele deve usar new, malloc, ou outro mecanismo de alocação dinâmica de memória.
5- e como paremetro de função, o que é "Targs&&... mArgs" denovo o que ser essas reticencias e esses dois &&??(obs: eu sei que dentro de condições quer dizer and)
Isso não tem a ver com lógica booleana, é como você declara ponteiros em C++. Esse por si só é um assunto muito extenso e existem várias formas de declarar ponteiro em C++, ou ponteiros para ponteiros, como o && indica.
Bom, espero ter ajudado :D Esse não é um código complicado, mas converge diversos assuntos diferentes. Vá por parte, quebrando um tópico de cada vez. Eu sugiro, fortemente, que antes de avançar nos seus estudos você faça uma pausa para praticar mais a programação genérica e, principalmente, a declaração e atribuição de ponteiros em C++, porque você vai ver gerenciamento de memória em todo lugar (Y)
Um abraço e boa jornada, com certeza ela será cheia de conhecimento XD
Estevão Dias
Responder
Clique aqui para fazer login e interagir na Comunidade :)