OVH Cloud OVH Cloud

Initialisation de variable (!)

23 réponses
Avatar
Aurélien REGAT-BARREL
Hello à tous,
Je ne comprends pas pourquoi dans l'exemple suivant b3 est considéré comme
la déclaration d'un prototype de fonction (VC++ 7.1, MingW 3.3.1), d'autant
plus que b2 est valide.

class A
{
public:
A( int ) {}
};

class B
{
public:
B( A a1, A a2 ) {};
};

int main()
{
int i1 = 0;
int i2 = 0;

A a1( 0 );
A a2( 0 );

B b1( a1, a2 );
B b2( A( 0 ), A( 0 ) );
// warning C4930 : 'B b3(A,A)' : fonction prototypée non appelée
// (était-ce la définition de variable souhaitée ?)
B b3( A( i1 ), A( i2 ) );
}

La suite du programme montre bien que b3 est considéré comme une fonction.
Merci.

--
Aurélien REGAT-BARREL

10 réponses

1 2 3
Avatar
Aurélien REGAT-BARREL
Pourquoi faire simple quand on peut faire compliqué...
Z'ont même pas été fichus de pondre des mots-clés commençant
par "__" -- c'est pourtant une technique assez classique pour
définir des mots-clefs spéfiques à un compilo et/ou un système.


C'est déjà fait avec Managed C++, et c'est imbitable comme syntaxe. Faut
pourrir ton code de mot clés genre __gc et c'est super lourd.
Y'en a un qui est "marrant" : __identifier, qui permet d'utiliser un mot clé
comme identifieur.
http://msdn.microsoft.com/library/en-us/vcmex/html/vclrf__identifier.asp

Si j'ai bien compris Managed C++ c'est une extension MS au C++ standard,
alors que C++ CLI c'est un nouveau langage (et si j'ai bien compris encore
Intel et Comeau travaillent à un compilateur dessus, en plus de MS biensûr).
http://download.microsoft.com/download/9/9/c/99c65bcd-ac66-482e-8dc1-0e14cd1670cd/C++-CLI%20Standard.pdf

--
Aurélien REGAT-BARREL

Avatar
Gabriel Dos Reis
"Aurélien REGAT-BARREL" writes:

| Si j'ai bien compris Managed C++ c'est une extension MS au C++ standard,
| alors que C++ CLI c'est un nouveau langage (et si j'ai bien compris encore
| Intel et Comeau travaillent à un compilateur dessus, en plus de MS biensûr).
| http://download.microsoft.com/download/9/9/c/99c65bcd-ac66-482e-8dc1-0e14cd1670cd/C++-CLI%20Standard.pdf

Tu n'as qu'à moitié bien compris ;-)

-- Gaby
Avatar
Fabien LE LEZ
On Fri, 26 Nov 2004 13:53:23 +0100, "Aurélien REGAT-BARREL"
:

Si j'ai bien compris Managed C++ c'est une extension MS au C++ standard,
alors que C++ CLI c'est un nouveau langage (et si j'ai bien compris encore
Intel et Comeau travaillent à un compilateur dessus, en plus de MS biensûr).


Y'a pas quelqu'un qui va se dévouer pour faire une encapsulation
propre de tout ce machin, appelable depuis un programme en vrai C++ ?


--
;-)

Avatar
Aurélien REGAT-BARREL
Y'a pas quelqu'un qui va se dévouer pour faire une encapsulation
propre de tout ce machin, appelable depuis un programme en vrai C++ ?


Ben si tu te sens de faire mieux que Lippman et Sutter, y'a plus qu'à ;-)

--
Aurélien REGAT-BARREL

Avatar
Loïc Joly
Aurélien REGAT-BARREL wrote:

Y'a pas quelqu'un qui va se dévouer pour faire une encapsulation
propre de tout ce machin, appelable depuis un programme en vrai C++ ?



Ben si tu te sens de faire mieux que Lippman et Sutter, y'a plus qu'à ;-)


Mieux, ou différent ? Il ont bien réussi à ce que le code C++ soit
appelable de façon transparente par du code managé, mais rien n'existe
dans l'autre sens (il faut passer par des extensions autres, comme COM,
ou par des astuces non docummentées). Alors, difficulté technique, ou
volonté politique ?

--
Loïc


Avatar
Aurelien REGAT-BARREL
Mieux, ou différent ? Il ont bien réussi à ce que le code C++ soit
appelable de façon transparente par du code managé, mais rien n'existe
dans l'autre sens (il faut passer par des extensions autres, comme COM, ou
par des astuces non docummentées). Alors, difficulté technique, ou volonté
politique ?


#using <mscorlib.dll>
#include <string>
#include <iostream>

int main()
{
std::string s( "coucou" );
std::cout << s << " avec coutn";
System::Console::Write( s.c_str() );
System::Console::WriteLine( S" avec System::Console" );
return 0;
}

J'appelle bien du .Net depuis du C++ non ?

--
Aurélien REGAT-BARREL

Avatar
Aurelien REGAT-BARREL
Tu n'as qu'à moitié bien compris ;-)


Oui, mais quelle moitié ? :-)

--
Aurélien REGAT-BARREL

Avatar
Gabriel Dos Reis
"Aurelien REGAT-BARREL" writes:

| > Mieux, ou différent ? Il ont bien réussi à ce que le code C++ soit
| > appelable de façon transparente par du code managé, mais rien n'existe
| > dans l'autre sens (il faut passer par des extensions autres, comme COM, ou
| > par des astuces non docummentées). Alors, difficulté technique, ou volonté
| > politique ?
|
| #using <mscorlib.dll>
| #include <string>
| #include <iostream>
|
| int main()
| {
| std::string s( "coucou" );
| std::cout << s << " avec coutn";
| System::Console::Write( s.c_str() );
| System::Console::WriteLine( S" avec System::Console" );
| return 0;
| }
|
| J'appelle bien du .Net depuis du C++ non ?

Vraiment ?

-- Gaby
Avatar
Aurelien REGAT-BARREL
| J'appelle bien du .Net depuis du C++ non ?

Vraiment ?


Ben heu... oui ? (je vois pas où tu veux en venir)

--
Aurélien REGAT-BARREL

Avatar
Loïc Joly
Aurelien REGAT-BARREL wrote:

Mieux, ou différent ? Il ont bien réussi à ce que le code C++ soit
appelable de façon transparente par du code managé, mais rien n'existe
dans l'autre sens (il faut passer par des extensions autres, comme COM, ou
par des astuces non docummentées). Alors, difficulté technique, ou volonté
politique ?



#using <mscorlib.dll>
#include <string>
#include <iostream>

int main()
{
std::string s( "coucou" );
std::cout << s << " avec coutn";
System::Console::Write( s.c_str() );
System::Console::WriteLine( S" avec System::Console" );
return 0;
}

J'appelle bien du .Net depuis du C++ non ?


Ce n'est pas du C++, mais du C++ managé. Il comporte des mots clefs
spécifique, et doit être compilé avec le flag /clr.

Maintenant, ce que je voudrait, c'est plutôt ce genre de situation :

#include <dotnet.h>
#include <string>
#include <iostream>

int main()
{
std::string s( "coucou" );
std::cout << s << " avec coutn";

// Ici, éventuellement quelquechose du style
// DotNet::LoadMSILInterpreter();
System::Console::Write( s );
System::Console::WriteLine( " avec System::Console" );
return 0;
}


Ce n'est pas pur caprice. Nous avons du code non managé existant, que
nous voulons majoritairement portable. Et nous voudrions dans une des
couches basses de ce code faire appel à des fonctions managées (le
remoting.NET). Recompiler tout notre code (y compris le code d'autres
bibliothèques, dont nous n'avons pas les sources, mais qui utilisent des
callback sur des fonctions de notre code) en /clr, simplement pour en
avoir un petit bout qui fasse appel à des fonctions managées semble
excessif...

Je suis prèt à appeler toutes les fonctions de bibliothèque nécessaires,
mais souhaite le faire depuis un code C++ standard.

--
Loïc


1 2 3