Je désire écrire une classe permettant de manipuler un sous-ensemble
d'un buffer texte. Cette classe n'aura comme donnée membre que le
pointeur sur la partie du buffer et la taille du buffer à manipuler.
Exemple:
class InBuffField
{
public:
InBuffField(char *pbuff, size_t len);
Mon problème est que je veux supporter dans cette classe à la fois les
pointeurs vers des "char*" et des "const char*". La version avec "const
char*" n'aurait donc pas accès à des méthode telles que "Replace".
Je dois donc décider d'un type pour "m_pBuff". Je ne vois pas comment
faire, à part en faisant une classe template pouvant prendre comme type
"char" ou "const char". Par contre après, ça va me poser des problèmes
pour mes méthodes "Compare" car elles vont devoir comparer des objets de
type:
- InBuffField<char>
- InBuffField<const char>
J'ai pensé à la conversion automatique (fonction membre):
| Je ne pense pas -- à confirmer -- que la norme impose une | manière spécifique de stocker une chaîne de caractères litérale.
à part que c'est une lvalue et un tableau ?
Oui. Je voulais parler de l'endroit de stockage [*]. Mais je crois finalement que la norme parle bien des différents endroits, tels que la pile, le tas, le « free store », etc., et qu'elle attribue un de ces endroits aux chaînes de caractères litérales.
[*] Ouais, quand j'ai dit « une manière spécifique de stocker », il fallait lire « une manière et un endroit spécifiques pour stocker ».
Donne-t-elle d'autres précisions (donne-t-elle d'abord ces précisions ?) ?
--drkm
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
drkm <darkman_spam@yahoo.fr> writes:
| Je ne pense pas -- à confirmer -- que la norme impose une
| manière spécifique de stocker une chaîne de caractères litérale.
à part que c'est une lvalue et un tableau ?
Oui. Je voulais parler de l'endroit de stockage [*]. Mais je crois
finalement que la norme parle bien des différents endroits, tels que
la pile, le tas, le « free store », etc., et qu'elle attribue un de
ces endroits aux chaînes de caractères litérales.
[*] Ouais, quand j'ai dit « une manière spécifique de stocker »,
il fallait lire « une manière et un endroit spécifiques pour
stocker ».
Donne-t-elle d'autres précisions (donne-t-elle d'abord ces
précisions ?) ?
| Je ne pense pas -- à confirmer -- que la norme impose une | manière spécifique de stocker une chaîne de caractères litérale.
à part que c'est une lvalue et un tableau ?
Oui. Je voulais parler de l'endroit de stockage [*]. Mais je crois finalement que la norme parle bien des différents endroits, tels que la pile, le tas, le « free store », etc., et qu'elle attribue un de ces endroits aux chaînes de caractères litérales.
[*] Ouais, quand j'ai dit « une manière spécifique de stocker », il fallait lire « une manière et un endroit spécifiques pour stocker ».
Donne-t-elle d'autres précisions (donne-t-elle d'abord ces précisions ?) ?
--drkm
Gabriel Dos Reis
drkm writes:
| Gabriel Dos Reis writes: | | > drkm writes: | | > | Mais qu'en est-il finalement de l'affectation initiale : | | > | char * str = "..." ; | | > deprecated. | | Donc légal ?!?
quelque chose qui est deprecated est forcément valide, sinon cela n'aurait pas de sens :-)
| J'étais persuadé que ce n'était légal que dans les C | ancestraux, pré-C89, et certainement plus en C++98.
c'est une construction assez fréquente en C. Est-ce que le bénéfice qu'on tire en cassant de tel code C en vaut la chandelle ?
-- Gaby
drkm <darkman_spam@yahoo.fr> writes:
| Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
|
| > drkm <darkman_spam@yahoo.fr> writes:
|
| > | Mais qu'en est-il finalement de l'affectation initiale :
|
| > | char * str = "..." ;
|
| > deprecated.
|
| Donc légal ?!?
quelque chose qui est deprecated est forcément valide, sinon cela
n'aurait pas de sens :-)
| J'étais persuadé que ce n'était légal que dans les C
| ancestraux, pré-C89, et certainement plus en C++98.
c'est une construction assez fréquente en C. Est-ce que le bénéfice
qu'on tire en cassant de tel code C en vaut la chandelle ?