Est-ce que g est un nom dependant? Si oui (ce que je pense, mais les
seuls compilateurs que j'ai sous la main n'implemente pas la regle
ci-dessus donc il m'est impossible de tester et j'ai pas non plus la
norme sous la main), il permet donc de supplanter des membres de T.
Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il
y a moyen de le rendre dependant pour supplanter des membres de T.
A+
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
template <typename T> class SubT : public T { public: #if TEST using T::bar; #endif void bar() {}
void test() { int i; bar(i); } };
int main() { SubT<Foo> foo; foo.test(); } //eof
$ g++ -o mtest test_subtmpl.cpp test_subtmpl.cpp: In member function `void SubT<T>::test() [with T = Foo]': test_subtmpl.cpp:23: instantiated from here test_subtmpl.cpp:17: error: no matching function for call to `SubT<Foo>::bar(int&)' test_subtmpl.cpp:13: note: candidates are: void SubT<T>::bar() [with T = Foo] $ g++ -DTEST=1 -o mtest test_subtmpl.cpp && echo compilation succeeded compilation succeeded
xavier
Jean-Marc Bourguet a dis le 10/01/2005 15:44:
J'ai pas la norme sous la main.
Moi non plus, mais je pense que l'exemple ci-dessous devrait apporter un
début de réponse :
template <typename T>
class SubT : public T {
public:
#if TEST
using T::bar;
#endif
void bar() {}
void test() {
int i;
bar(i);
}
};
int main() {
SubT<Foo> foo;
foo.test();
}
//eof
$ g++ -o mtest test_subtmpl.cpp
test_subtmpl.cpp: In member function `void SubT<T>::test() [with T = Foo]':
test_subtmpl.cpp:23: instantiated from here
test_subtmpl.cpp:17: error: no matching function for call to
`SubT<Foo>::bar(int&)'
test_subtmpl.cpp:13: note: candidates are: void SubT<T>::bar() [with T =
Foo]
$ g++ -DTEST=1 -o mtest test_subtmpl.cpp && echo compilation succeeded
compilation succeeded
template <typename T> class SubT : public T { public: #if TEST using T::bar; #endif void bar() {}
void test() { int i; bar(i); } };
int main() { SubT<Foo> foo; foo.test(); } //eof
$ g++ -o mtest test_subtmpl.cpp test_subtmpl.cpp: In member function `void SubT<T>::test() [with T = Foo]': test_subtmpl.cpp:23: instantiated from here test_subtmpl.cpp:17: error: no matching function for call to `SubT<Foo>::bar(int&)' test_subtmpl.cpp:13: note: candidates are: void SubT<T>::bar() [with T = Foo] $ g++ -DTEST=1 -o mtest test_subtmpl.cpp && echo compilation succeeded compilation succeeded
xavier
Gabriel Dos Reis
Jean-Marc Bourguet writes:
| J'ai pas la norme sous la main. | Soit le cas | | template <typename T> | struct C: T { | void f() { g(); } | }; | | g n'etant pas un nom dependant, il n'est pas cherche dans les membres | de T. |
OK.
| Soit | | template <typename T> | struct C: T { | void g() {...} | }; | | Est-ce que g est un nom dependant?
g est en train d'être déclaré ; qu'es-ce que cela voudrait dire d'être dépendant dans ce cas ?
| Si oui (ce que je pense, mais les | seuls compilateurs que j'ai sous la main n'implemente pas la regle | ci-dessus donc il m'est impossible de tester et j'ai pas non plus la | norme sous la main), il permet donc de supplanter des membres de T.
Oui.
| Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il | y a moyen de le rendre dependant pour supplanter des membres de T.
Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque celui-ci est en train d'être déclaré.
-- Gaby
Jean-Marc Bourguet <jm@bourguet.org> writes:
| J'ai pas la norme sous la main.
| Soit le cas
|
| template <typename T>
| struct C: T {
| void f() { g(); }
| };
|
| g n'etant pas un nom dependant, il n'est pas cherche dans les membres
| de T.
|
OK.
| Soit
|
| template <typename T>
| struct C: T {
| void g() {...}
| };
|
| Est-ce que g est un nom dependant?
g est en train d'être déclaré ; qu'es-ce que cela voudrait dire d'être
dépendant dans ce cas ?
| Si oui (ce que je pense, mais les
| seuls compilateurs que j'ai sous la main n'implemente pas la regle
| ci-dessus donc il m'est impossible de tester et j'ai pas non plus la
| norme sous la main), il permet donc de supplanter des membres de T.
Oui.
| Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il
| y a moyen de le rendre dependant pour supplanter des membres de T.
Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque
celui-ci est en train d'être déclaré.
| J'ai pas la norme sous la main. | Soit le cas | | template <typename T> | struct C: T { | void f() { g(); } | }; | | g n'etant pas un nom dependant, il n'est pas cherche dans les membres | de T. |
OK.
| Soit | | template <typename T> | struct C: T { | void g() {...} | }; | | Est-ce que g est un nom dependant?
g est en train d'être déclaré ; qu'es-ce que cela voudrait dire d'être dépendant dans ce cas ?
| Si oui (ce que je pense, mais les | seuls compilateurs que j'ai sous la main n'implemente pas la regle | ci-dessus donc il m'est impossible de tester et j'ai pas non plus la | norme sous la main), il permet donc de supplanter des membres de T.
Oui.
| Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il | y a moyen de le rendre dependant pour supplanter des membres de T.
Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque celui-ci est en train d'être déclaré.
-- Gaby
Gabriel Dos Reis
xavier writes:
| Jean-Marc Bourguet a dis le 10/01/2005 15:44: | > J'ai pas la norme sous la main. | | Moi non plus, mais je pense que l'exemple ci-dessous devrait apporter | un début de réponse :
Je ne vois paas le rapport. Tu parles de « nom masqué » (« hidden name ») alors que Jean-Marc par de functions supplantées de de nom dépendant.
| // test_subtmpl.cpp | class Foo { | public: | void bar(int i) {} | }; | | template <typename T> | class SubT : public T { | public: | #if TEST | using T::bar; | #endif | void bar() {} | | void test() { | int i; | bar(i); | } | }; | | int main() { | SubT<Foo> foo; | foo.test(); | } | //eof | | $ g++ -o mtest test_subtmpl.cpp | test_subtmpl.cpp: In member function `void SubT<T>::test() [with T = Foo]': | test_subtmpl.cpp:23: instantiated from here | test_subtmpl.cpp:17: error: no matching function for call to | `SubT<Foo>::bar(int&)' | test_subtmpl.cpp:13: note: candidates are: void SubT<T>::bar() [with T | = Foo] | $ g++ -DTEST=1 -o mtest test_subtmpl.cpp && echo compilation succeeded | compilation succeeded
Tu n'as pas besoin de template pour avoir cette erreur.
-- Gaby
xavier <xtrochu@yahoo.com> writes:
| Jean-Marc Bourguet a dis le 10/01/2005 15:44:
| > J'ai pas la norme sous la main.
|
| Moi non plus, mais je pense que l'exemple ci-dessous devrait apporter
| un début de réponse :
Je ne vois paas le rapport.
Tu parles de « nom masqué » (« hidden name ») alors que Jean-Marc par
de functions supplantées de de nom dépendant.
| // test_subtmpl.cpp
| class Foo {
| public:
| void bar(int i) {}
| };
|
| template <typename T>
| class SubT : public T {
| public:
| #if TEST
| using T::bar;
| #endif
| void bar() {}
|
| void test() {
| int i;
| bar(i);
| }
| };
|
| int main() {
| SubT<Foo> foo;
| foo.test();
| }
| //eof
|
| $ g++ -o mtest test_subtmpl.cpp
| test_subtmpl.cpp: In member function `void SubT<T>::test() [with T = Foo]':
| test_subtmpl.cpp:23: instantiated from here
| test_subtmpl.cpp:17: error: no matching function for call to
| `SubT<Foo>::bar(int&)'
| test_subtmpl.cpp:13: note: candidates are: void SubT<T>::bar() [with T
| = Foo]
| $ g++ -DTEST=1 -o mtest test_subtmpl.cpp && echo compilation succeeded
| compilation succeeded
Tu n'as pas besoin de template pour avoir cette erreur.
| Jean-Marc Bourguet a dis le 10/01/2005 15:44: | > J'ai pas la norme sous la main. | | Moi non plus, mais je pense que l'exemple ci-dessous devrait apporter | un début de réponse :
Je ne vois paas le rapport. Tu parles de « nom masqué » (« hidden name ») alors que Jean-Marc par de functions supplantées de de nom dépendant.
| // test_subtmpl.cpp | class Foo { | public: | void bar(int i) {} | }; | | template <typename T> | class SubT : public T { | public: | #if TEST | using T::bar; | #endif | void bar() {} | | void test() { | int i; | bar(i); | } | }; | | int main() { | SubT<Foo> foo; | foo.test(); | } | //eof | | $ g++ -o mtest test_subtmpl.cpp | test_subtmpl.cpp: In member function `void SubT<T>::test() [with T = Foo]': | test_subtmpl.cpp:23: instantiated from here | test_subtmpl.cpp:17: error: no matching function for call to | `SubT<Foo>::bar(int&)' | test_subtmpl.cpp:13: note: candidates are: void SubT<T>::bar() [with T | = Foo] | $ g++ -DTEST=1 -o mtest test_subtmpl.cpp && echo compilation succeeded | compilation succeeded
Tu n'as pas besoin de template pour avoir cette erreur.
-- Gaby
Jean-Marc Bourguet
Gabriel Dos Reis writes:
| Si oui (ce que je pense, mais les | seuls compilateurs que j'ai sous la main n'implemente pas la regle | ci-dessus donc il m'est impossible de tester et j'ai pas non plus la | norme sous la main), il permet donc de supplanter des membres de T.
Oui.
| Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il | y a moyen de le rendre dependant pour supplanter des membres de T.
Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque celui-ci est en train d'être déclaré.
Je m'exprime mal, je voudrais un moyen pour que g ne supplante pas une virtuelle de meme nom dans T. (Mettons que g soit prive des deux cotes).
J'ai pas le temps d'etre plus long, je dois partir maintenant.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
| Si oui (ce que je pense, mais les
| seuls compilateurs que j'ai sous la main n'implemente pas la regle
| ci-dessus donc il m'est impossible de tester et j'ai pas non plus la
| norme sous la main), il permet donc de supplanter des membres de T.
Oui.
| Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il
| y a moyen de le rendre dependant pour supplanter des membres de T.
Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque
celui-ci est en train d'être déclaré.
Je m'exprime mal, je voudrais un moyen pour que g ne supplante pas une
virtuelle de meme nom dans T. (Mettons que g soit prive des deux
cotes).
J'ai pas le temps d'etre plus long, je dois partir maintenant.
--
Jean-Marc
FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ
C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html
Site de usenet-fr: http://www.usenet-fr.news.eu.org
| Si oui (ce que je pense, mais les | seuls compilateurs que j'ai sous la main n'implemente pas la regle | ci-dessus donc il m'est impossible de tester et j'ai pas non plus la | norme sous la main), il permet donc de supplanter des membres de T.
Oui.
| Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il | y a moyen de le rendre dependant pour supplanter des membres de T.
Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque celui-ci est en train d'être déclaré.
Je m'exprime mal, je voudrais un moyen pour que g ne supplante pas une virtuelle de meme nom dans T. (Mettons que g soit prive des deux cotes).
J'ai pas le temps d'etre plus long, je dois partir maintenant.
-- Jean-Marc FAQ de fclc++: http://www.cmla.ens-cachan.fr/~dosreis/C++/FAQ C++ FAQ Lite en VF: http://www.ifrance.com/jlecomte/c++/c++-faq-lite/index.html Site de usenet-fr: http://www.usenet-fr.news.eu.org
Gabriel Dos Reis
Jean-Marc Bourguet writes:
| Gabriel Dos Reis writes: | | > | Si oui (ce que je pense, mais les | > | seuls compilateurs que j'ai sous la main n'implemente pas la regle | > | ci-dessus donc il m'est impossible de tester et j'ai pas non plus la | > | norme sous la main), il permet donc de supplanter des membres de T. | > | > Oui. | > | > | Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il | > | y a moyen de le rendre dependant pour supplanter des membres de T. | > | > Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque | > celui-ci est en train d'être déclaré. | | Je m'exprime mal, je voudrais un moyen pour que g ne supplante pas une | virtuelle de meme nom dans T. (Mettons que g soit prive des deux | cotes).
Je crois que c'est impossible -- tout comme dans le cas normal sans template. La seule exception c'est si g() est elle-même template.
Tu peux, si tes contraintes le permettent, définir g() dans une autre classe de base et en hériter.
-- Gaby
Jean-Marc Bourguet <jm@bourguet.org> writes:
| Gabriel Dos Reis <gdr@integrable-solutions.net> writes:
|
| > | Si oui (ce que je pense, mais les
| > | seuls compilateurs que j'ai sous la main n'implemente pas la regle
| > | ci-dessus donc il m'est impossible de tester et j'ai pas non plus la
| > | norme sous la main), il permet donc de supplanter des membres de T.
| >
| > Oui.
| >
| > | Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il
| > | y a moyen de le rendre dependant pour supplanter des membres de T.
| >
| > Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque
| > celui-ci est en train d'être déclaré.
|
| Je m'exprime mal, je voudrais un moyen pour que g ne supplante pas une
| virtuelle de meme nom dans T. (Mettons que g soit prive des deux
| cotes).
Je crois que c'est impossible -- tout comme dans le cas normal sans
template. La seule exception c'est si g() est elle-même template.
Tu peux, si tes contraintes le permettent, définir g() dans une autre
classe de base et en hériter.
| Gabriel Dos Reis writes: | | > | Si oui (ce que je pense, mais les | > | seuls compilateurs que j'ai sous la main n'implemente pas la regle | > | ci-dessus donc il m'est impossible de tester et j'ai pas non plus la | > | norme sous la main), il permet donc de supplanter des membres de T. | > | > Oui. | > | > | Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il | > | y a moyen de le rendre dependant pour supplanter des membres de T. | > | > Je ne comprends pas ce que tu veux dire pas nom dépendant, lorsque | > celui-ci est en train d'être déclaré. | | Je m'exprime mal, je voudrais un moyen pour que g ne supplante pas une | virtuelle de meme nom dans T. (Mettons que g soit prive des deux | cotes).
Je crois que c'est impossible -- tout comme dans le cas normal sans template. La seule exception c'est si g() est elle-même template.
Tu peux, si tes contraintes le permettent, définir g() dans une autre classe de base et en hériter.
Si oui (ce que je pense, mais les seuls compilateurs que j'ai sous la main n'implemente pas la regle ci-dessus donc il m'est impossible de tester et j'ai pas non plus la norme sous la main), il permet donc de supplanter des membres de T. Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il y a moyen de le rendre dependant pour supplanter des membres de T.
Premier paragraphe de §14.6 : « Three kinds of names can be used within a template definition. » On a tendence à ne parler que des noms dépendants et noms non-dépendants, et on oublie la troisième catégorie : les « locally declared names ». (Probablement parce que ce sont les seuls qui ne posent pas de problème:-).)
-- James Kanze home: www.gabi-soft.fr Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Si oui (ce que je pense, mais les seuls compilateurs que j'ai
sous la main n'implemente pas la regle ci-dessus donc il m'est
impossible de tester et j'ai pas non plus la norme sous la
main), il permet donc de supplanter des membres de T. Est-ce
qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il
y a moyen de le rendre dependant pour supplanter des membres
de T.
Premier paragraphe de §14.6 : « Three kinds of names can be used
within a template definition. » On a tendence à ne parler que
des noms dépendants et noms non-dépendants, et on oublie la
troisième catégorie : les « locally declared names ».
(Probablement parce que ce sont les seuls qui ne posent pas de
problème:-).)
--
James Kanze home: www.gabi-soft.fr
Conseils en informatique orientée objet/
Beratung in objektorientierter Datenverarbeitung
9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34
Si oui (ce que je pense, mais les seuls compilateurs que j'ai sous la main n'implemente pas la regle ci-dessus donc il m'est impossible de tester et j'ai pas non plus la norme sous la main), il permet donc de supplanter des membres de T. Est-ce qu'il y a moyen de le rendre indepedant? Si non, est-ce qu'il y a moyen de le rendre dependant pour supplanter des membres de T.
Premier paragraphe de §14.6 : « Three kinds of names can be used within a template definition. » On a tendence à ne parler que des noms dépendants et noms non-dépendants, et on oublie la troisième catégorie : les « locally declared names ». (Probablement parce que ce sont les seuls qui ne posent pas de problème:-).)
-- James Kanze home: www.gabi-soft.fr Conseils en informatique orientée objet/ Beratung in objektorientierter Datenverarbeitung 9 pl. Pierre Sémard, 78210 St.-Cyr-l'École, France +33 (0)1 30 23 00 34