| Autor |
Mensagem |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 13:42:16
|
lucas_carvalho100
JavaEvangelist
![[Avatar]](/images/avatar/a7fe02c5b4127df98069e5321ccf6f1a.jpg)
Membro desde: 18/03/2010 08:23:16
Mensagens: 322
Offline
|
Pessoal alguém sabe se tem alguma forma de criar um atributo genérico no C++?, tipo um "object"...
Vou tenta ser bem claro....
Criei um método com template, até ai beleza, só que não consegui fazer funcionar template com o atributo da classe, dá um erro e o V.S para de funcionar....
Segue o código...
Preciso de alguma lista que aceite qualquer objeto... Não precisa necessariamente usar o vector..
Qualquer duvida estou a disposição.
Obrigado.
|
"A mente que se abre a uma nova idéia jamais voltará ao seu tamanho original."
Albert Einstein |
|
|
 |
|
|
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 14:04:26
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Não entendi o que você quer. O vector aceita qualquer tipo de objeto. Você pode fazer isso aqui: Ou então, se quiser deixar tudo genérico: Outra coisa. Você está trabalhando mesmo com tudo no .h? Ou você só contrai para postar aqui no GUJ?
This message was edited 2 times. Last update was at 18/11/2010 14:05:32
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 14:09:27
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Outra coisa. Lembre-se que no C++, o vector trabalha por valor. Isso significa que adicionar objetos e retira-los do vector irá chamar o construtor de cópia. Cuidado também que não existe "polimorfismo por valor". Uma opção é ter um vector de ponteiros. Outra, ainda melhor, é trabalhar com smart pointers. Além disso, vale ressaltar que templates e generics são coisas completamente diferentes. Templates são muitíssimo mais poderosos e efetivamente eliminam restrições de tipos de maneira typesafe. Generics já servem para reforçar o sistema de tipos. Não trate os dois como se fossem a mesma coisa.
This message was edited 1 time. Last update was at 18/11/2010 14:10:36
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 14:19:15
|
lucas_carvalho100
JavaEvangelist
![[Avatar]](/images/avatar/a7fe02c5b4127df98069e5321ccf6f1a.jpg)
Membro desde: 18/03/2010 08:23:16
Mensagens: 322
Offline
|
Estou usando tudo no .h mesmo(somente para essa classe referencia http://www.linhadecodigo.com.br/artigo/1672/B%C3%A1sico-de-C-Templates.aspx), pq como estou usando templates o compilador não consegue compilar, ele da um erro de link, pois estou montando uma espécie de "biblioteca".
A forma de como queria o vetor ou lista seria assim...
Logo esse atributo condições aceitaria qualquer tipo, int, string, char e etc....
Não quero usar o template em toda a classe pois uma vez que a classe for instanciada, a lista pode aceitar qualquer tipo..
Entendeu o problema?
Desculpe ter misturado generic com template...
|
"A mente que se abre a uma nova idéia jamais voltará ao seu tamanho original."
Albert Einstein |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 14:22:24
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
O C++ não tem um "tipo objeto" (ou seja, pai de todas as classes) como o Java. Pensar em Java nem sempre é muito adequado em C++.
Então fica difícil você ter um "vetor de objetos" tal como há um "ArrayList<Object>".
Se você usar o boost, pode usar o tipo boost::variant que se comporta como um tipo que pode comportar vários tipos de objetos.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 14:23:38
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
boost::variant: http://beta.boost.org/doc/libs/1_44_0/doc/html/variant.html
Ele é o mais parecido possível com um Object que você pode ter em C++.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 14:27:40
|
ViniGodoy
Moderador
![[Avatar]](/images/avatar/1921493b5362e63fbe8983f4bd54157d.png)
Membro desde: 11/12/2006 08:22:01
Mensagens: 20580
Localização: Curitiba/PR
Offline
|
Ainda assim, mesmo em java, um vector<object> é uma péssima alternativa de projeto. Exige casts, é difícil de trabalhar.
O que exatamente você quer fazer? Talvez seja interessante criar sua própria abstract base class.
Sim, no caso de templates é obrigatório colocar .h e .cpp no mesmo arquivo. Perguntei pq vc já passou outros exemplos aqui com tudo junto, e esse é um erro relativamente comum de quem do Java vai pro C++ e sai programando.
|
@ViniGodoy - Lattes
Tem dúvidas de Java? Poste no fórum! Não respondo dúvidas de java via MP!
Ponto V! - Desenvolvimento de Jogos Profissional - @Pontov - Facebook
Projeto Towel - Swing de uma forma inteligente (Novo lar do ObjectTableModel e do Auto-Filtro).
Ei... você está usando DefaultTableModel no seu projeto??
Não faça isso! Veja: http://www.guj.com.br/posts/list/15/199067.java#1001295 |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 14:37:02
|
lucas_carvalho100
JavaEvangelist
![[Avatar]](/images/avatar/a7fe02c5b4127df98069e5321ccf6f1a.jpg)
Membro desde: 18/03/2010 08:23:16
Mensagens: 322
Offline
|
Bem eu programo tudo separado, .h e .cpp esse foi o único que fiz assim(pq ele me obriga)...
Bem estou montando uma classe para conectar no oracle, a biblioteca occi da oracle não funciona nem com "reza braba"(lembra postei até alguns post sobre isso), então achei uma biblioteca chamada OTL, ela usa a OCI da própria oracle mesmo, essa funcionou muito bem, no primeiro teste que fiz funcionou, no entanto ela não é muito funcional, então estou montando uma classe que conecta,executa a consulta e retorna os dados para outra classe, +/- como o Statement e o ResultSet no caso do java, esse trabalho tem o intuito de facilitar o trabalho de acesso a dados.....
Enfim e é por isso que esta precisando de uma lista de objetos de que aceite qualquer estrutura....
As vezes vocês podem pensar em outra idéia melhor, estou aberto a sugestões....
Obrigado....
|
"A mente que se abre a uma nova idéia jamais voltará ao seu tamanho original."
Albert Einstein |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 14:50:44
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Então não é "qualquer coisa".
É um dos tipos que podem ser tipos de colunas em uma tabela: numérico, string etc.
O boost::variant, no seu caso, deve cair como uma luva.
Embora o exemplo na página que lhe passei faça um variant que aceita apenas 2 tipos (int & string), é possível passar até 20 tipos diferentes, o que é mais que suficiente para todos os tipos que podem ser retornados pelo Oracle (espero))
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 15:22:27
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 15:23:53
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
O BOOST_FOREACH é mais ou menos o equivalente ao foreach do Java . Em uma versão posterior da especificação do C++ (que ainda não foi fechada, chamada C++0X) está previsto ter algo parecido (e até com a mesma sintaxe e significado) do foreach do Java.
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 17:31:23
|
lucas_carvalho100
JavaEvangelist
![[Avatar]](/images/avatar/a7fe02c5b4127df98069e5321ccf6f1a.jpg)
Membro desde: 18/03/2010 08:23:16
Mensagens: 322
Offline
|
Obrigado entanglement por postar o código, achei muito interessante, ainda não conhecia essa estrutura, vou fazer alguns testes com ela.
Obrigado.
|
"A mente que se abre a uma nova idéia jamais voltará ao seu tamanho original."
Albert Einstein |
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 17:36:57
|
lucas_carvalho100
JavaEvangelist
![[Avatar]](/images/avatar/a7fe02c5b4127df98069e5321ccf6f1a.jpg)
Membro desde: 18/03/2010 08:23:16
Mensagens: 322
Offline
|
entanglement ainda não fiz os testes, estava lendo o código e surgiu uma duvida, o que acontece se eu inserir dessa forma:
Ele reconhece que é string e insere ou ele pensa que é um vector e da erro?
This message was edited 1 time. Last update was at 18/11/2010 17:37:27
|
|
|
 |
![[Post New]](/templates/default/images/icon_minipost_new.gif) 18/11/2010 19:09:51
|
entanglement
GUJ Hacker
Membro desde: 26/09/2009 09:18:56
Mensagens: 5750
Offline
|
Reconhece que é string. Isso é porque o tipo foi explicitamente passado, nesse caso.
"Hare hare" pra você também!
|
|
|
 |
|
|