Pointeur (void*) en c++

Discutez d'informatique ici !
Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13687
Enregistré le: 08 Juin 2006, 08:55

pointeur (void*) en c++

par mathelot » 09 Avr 2021, 12:21

Bonjour,
est ce possible de définir un pointeur qui, selon les cas (cas délimités par if .. else if ... ) , va être transformé ("casté") en pointeur sur une chaine de caractères (char[] * pt) ou un pointeur vers une classe nommée GrandEntier (GrandEntier * pt) ?
je n'ai pas réussi à écrire ça convenablement et pour l'instant j'ai dédoublé le pointeur.

merci d'avance.



Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: pointeur (void*) en c++

par fatal_error » 09 Avr 2021, 14:43

slt mathelot,

j'imagine que tu peux regarder
https://www.learncpp.com/cpp-tutorial/void-pointers/
?

Si ca suffit pas pe poste ton code (minimaliste)

Mais parenthèse à part, c'est assez rare de devoir écrire des pointeurs en C++
ce que tu sembles vouloir faire peut s'apparenter à un Variant https://www.boost.org/doc/libs/1_64_0/d ... riant.html
la vie est une fête :)

hdci
Membre Irrationnel
Messages: 1962
Enregistré le: 23 Juin 2018, 17:13

Re: pointeur (void*) en c++

par hdci » 09 Avr 2021, 14:44

Cela fait bien longtemps que je n'ai pas programmé en C++, mais il me semble que oui.

Certaines fonction prennent en argument des void * ou retournent des void * (exemple, "malloc" pour le retour, et "realloc" pour l'argument et le retour)

La déclaration
voir * p = NULL ;

Ne fonctionne-t-elle pas ?

Sinon, en C++, une technique est de faire dériver toutes les classes d'une classe abstraite racine ce qui fait que tout pointeur sur une classe de la descendance est pointeur sur la classe racine, et pour peu que la classe ait défini des méthodes virtuelles pures adéquates il n'y a même plus besoin de "caster".
Il n'y a que 10 types de personne au monde : ceux qui comprennent le binaire et ceux qui ne le comprennent pas.

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13687
Enregistré le: 08 Juin 2006, 08:55

Re: pointeur (void*) en c++

par mathelot » 09 Avr 2021, 16:51

merci pour vos réponses. je regarde trois pistes:
- void pointeur à "caster"
- mot-clé "union"
- classe virtuelle

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: pointeur (void*) en c++

par fatal_error » 09 Avr 2021, 19:53

du coup l'ordre fait un peu peur car
les void pointeurs sont le pire
union c'est bas level au possible
et classe virtuelle ca implique polymorphisme (donc alloc, cast si mal fait), avec potentiellement du slicing
donc si tu veux éviter de transpirer oriente toi vers les variants pe tu ecriras un peu de code mais ca t'épargneras des heures de debug lol

A noter que si ton but c'est juste d'écrire des fonctions qui acceptent soit des entiers soit des string (à préférer à char* btw)

tu peux utiliser l'overloading
Code: Tout sélectionner
add(const string& a, const string& b) { return a + b } // my big number as a string

add(const BigInt &a, const BigInt &b) { return a + b} // si tant est que BigInt implemente operator+
la vie est une fête :)

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13687
Enregistré le: 08 Juin 2006, 08:55

Re: pointeur (void*) en c++

par mathelot » 09 Avr 2021, 20:14

bon, je regarde en premier les variants. Mon but, écrire un parseur de calculatrice (analyseur syntaxique) puis afficher des calculs à une précision de 10^{-5}.

Avatar de l’utilisateur
fatal_error
Modérateur
Messages: 6610
Enregistré le: 22 Nov 2007, 13:00

Re: pointeur (void*) en c++

par fatal_error » 09 Avr 2021, 20:41

bon ben pour construire un ast et l'évaluer je pense que tu as même pas besoin de variants lol
t'as juste besoin decrire ton BigInt ou ton BigFloat (à noter que pour 10^{-5} les double devraient suffire, mais admettons) et d'écrire un moyen de convertire l'un en l'autre si tant est que tu veux implémenter un algo spécial pour les BigInt sinon juste manipuler des BigFloat suffit
la vie est une fête :)

Avatar de l’utilisateur
mathelot
Habitué(e)
Messages: 13687
Enregistré le: 08 Juin 2006, 08:55

Re: pointeur (void*) en c++

par mathelot » 09 Avr 2021, 20:53

euh, je me suis trompé, la précision désirée est de
Pour la multiplication des entiers, j'utiliserai la FFT.

 

Retourner vers ϟ Informatique

Qui est en ligne

Utilisateurs parcourant ce forum : Aucun utilisateur enregistré et 5 invités

Tu pars déja ?



Fais toi aider gratuitement sur Maths-forum !

Créé un compte en 1 minute et pose ta question dans le forum ;-)
Inscription gratuite

Identification

Pas encore inscrit ?

Ou identifiez-vous :

Inscription gratuite