Bonsoir à tous,
j'ai les deux classes suivantes:
class VideoDevice
{
private:
std::string name;
public:
std::string & GetName() const { return name; }
};
class VideoDeviceEnumerator
{
public:
void FillList(TBox * box);
void getVideoDevice(const std::string & fooName, VideoDevice * vd);
};
Les deux fonctions de VideoDeviceEnumerator énumèrent en interne tous les
périphériques de capture vidéo disponibles sur le système... Et la fonction
FillList est tout ce qu'il y a de restrictif puisqu'elle ne fonctionne
qu'avec les objets de la VCL de Borland.
Je voudrais donc rendre cette classe identique à un itérateur, pour que
l'utilisateur puisse faire comme avec les conteneurs de la STL...
Un truc du genre:
VideoDeviceEnumerator vdEnum;
for (VideoDeviceEnumerator::constIterator ite = vdEnum.begin(); ite !=
vdEnum.end(); ++ite)
box->AddItem(ite->GetName());
Et pour obtenir un VideoDevice:
VideoDeviceEnumerator vdEnum;
VideoDeviceEnumerator::constIterator ite = std::find_if(vdEnum.begin
(),vdEnum.end(),"nom du périphérique");
Enfin, vous voyez de quoi je parle ;)
Comment je peux faire ça?
J'ai entendu dire que c'était pas conseillé de dériver des classes de la
STL, donc j'ai bien peur de devoir réimplémenter tout ça :(
Merci d'avance...
Mike
Bonsoir à tous,
j'ai les deux classes suivantes:
class VideoDevice
{
private:
std::string name;
public:
std::string & GetName() const { return name; }
};
class VideoDeviceEnumerator
{
public:
void FillList(TBox * box);
void getVideoDevice(const std::string & fooName, VideoDevice * vd);
};
Les deux fonctions de VideoDeviceEnumerator énumèrent en interne tous les
périphériques de capture vidéo disponibles sur le système... Et la fonction
FillList est tout ce qu'il y a de restrictif puisqu'elle ne fonctionne
qu'avec les objets de la VCL de Borland.
Je voudrais donc rendre cette classe identique à un itérateur, pour que
l'utilisateur puisse faire comme avec les conteneurs de la STL...
Un truc du genre:
VideoDeviceEnumerator vdEnum;
for (VideoDeviceEnumerator::constIterator ite = vdEnum.begin(); ite !=
vdEnum.end(); ++ite)
box->AddItem(ite->GetName());
Et pour obtenir un VideoDevice:
VideoDeviceEnumerator vdEnum;
VideoDeviceEnumerator::constIterator ite = std::find_if(vdEnum.begin
(),vdEnum.end(),"nom du périphérique");
Enfin, vous voyez de quoi je parle ;)
Comment je peux faire ça?
J'ai entendu dire que c'était pas conseillé de dériver des classes de la
STL, donc j'ai bien peur de devoir réimplémenter tout ça :(
Merci d'avance...
Mike
Bonsoir à tous,
j'ai les deux classes suivantes:
class VideoDevice
{
private:
std::string name;
public:
std::string & GetName() const { return name; }
};
class VideoDeviceEnumerator
{
public:
void FillList(TBox * box);
void getVideoDevice(const std::string & fooName, VideoDevice * vd);
};
Les deux fonctions de VideoDeviceEnumerator énumèrent en interne tous les
périphériques de capture vidéo disponibles sur le système... Et la fonction
FillList est tout ce qu'il y a de restrictif puisqu'elle ne fonctionne
qu'avec les objets de la VCL de Borland.
Je voudrais donc rendre cette classe identique à un itérateur, pour que
l'utilisateur puisse faire comme avec les conteneurs de la STL...
Un truc du genre:
VideoDeviceEnumerator vdEnum;
for (VideoDeviceEnumerator::constIterator ite = vdEnum.begin(); ite !=
vdEnum.end(); ++ite)
box->AddItem(ite->GetName());
Et pour obtenir un VideoDevice:
VideoDeviceEnumerator vdEnum;
VideoDeviceEnumerator::constIterator ite = std::find_if(vdEnum.begin
(),vdEnum.end(),"nom du périphérique");
Enfin, vous voyez de quoi je parle ;)
Comment je peux faire ça?
J'ai entendu dire que c'était pas conseillé de dériver des classes de la
STL, donc j'ai bien peur de devoir réimplémenter tout ça :(
Merci d'avance...
Mike
Bonsoir à tous,
j'ai les deux classes suivantes:
class VideoDevice
{
private:
std::string name;
public:
std::string & GetName() const { return name; }
};
class VideoDeviceEnumerator
{
public:
void FillList(TBox * box);
void getVideoDevice(const std::string & fooName, VideoDevice * vd);
};
Les deux fonctions de VideoDeviceEnumerator énumèrent en interne tous les
périphériques de capture vidéo disponibles sur le système... Et la
fonction
FillList est tout ce qu'il y a de restrictif puisqu'elle ne fonctionne
qu'avec les objets de la VCL de Borland.
Je voudrais donc rendre cette classe identique à un itérateur, pour que
l'utilisateur puisse faire comme avec les conteneurs de la STL...
Un truc du genre:
Et pour obtenir un VideoDevice:
Comment je peux faire ça?
J'ai entendu dire que c'était pas conseillé de dériver des classes de la
STL, ...
Bonsoir à tous,
j'ai les deux classes suivantes:
class VideoDevice
{
private:
std::string name;
public:
std::string & GetName() const { return name; }
};
class VideoDeviceEnumerator
{
public:
void FillList(TBox * box);
void getVideoDevice(const std::string & fooName, VideoDevice * vd);
};
Les deux fonctions de VideoDeviceEnumerator énumèrent en interne tous les
périphériques de capture vidéo disponibles sur le système... Et la
fonction
FillList est tout ce qu'il y a de restrictif puisqu'elle ne fonctionne
qu'avec les objets de la VCL de Borland.
Je voudrais donc rendre cette classe identique à un itérateur, pour que
l'utilisateur puisse faire comme avec les conteneurs de la STL...
Un truc du genre:
Et pour obtenir un VideoDevice:
Comment je peux faire ça?
J'ai entendu dire que c'était pas conseillé de dériver des classes de la
STL, ...
Bonsoir à tous,
j'ai les deux classes suivantes:
class VideoDevice
{
private:
std::string name;
public:
std::string & GetName() const { return name; }
};
class VideoDeviceEnumerator
{
public:
void FillList(TBox * box);
void getVideoDevice(const std::string & fooName, VideoDevice * vd);
};
Les deux fonctions de VideoDeviceEnumerator énumèrent en interne tous les
périphériques de capture vidéo disponibles sur le système... Et la
fonction
FillList est tout ce qu'il y a de restrictif puisqu'elle ne fonctionne
qu'avec les objets de la VCL de Borland.
Je voudrais donc rendre cette classe identique à un itérateur, pour que
l'utilisateur puisse faire comme avec les conteneurs de la STL...
Un truc du genre:
Et pour obtenir un VideoDevice:
Comment je peux faire ça?
J'ai entendu dire que c'était pas conseillé de dériver des classes de la
STL, ...
Si cette classe est une classe de base il est vivement conseillé de
définir
un destructeur, soit virtuel et public(*), soit non virtuel et
protégé(**).
...
protected:
// ~VideoDevice() { /* ... */ } // (*) interdire la destruction par la
base
public:
// virtual ~VideoDevice() { /* ... */ } // (**) autoriser (décommenter
selon)
VideoDeviceEnumerator::const_iterator ite = std::find(ite, end, "nom du
périphérique");
Si cette classe est une classe de base il est vivement conseillé de
définir
un destructeur, soit virtuel et public(*), soit non virtuel et
protégé(**).
...
protected:
// ~VideoDevice() { /* ... */ } // (*) interdire la destruction par la
base
public:
// virtual ~VideoDevice() { /* ... */ } // (**) autoriser (décommenter
selon)
VideoDeviceEnumerator::const_iterator ite = std::find(ite, end, "nom du
périphérique");
Si cette classe est une classe de base il est vivement conseillé de
définir
un destructeur, soit virtuel et public(*), soit non virtuel et
protégé(**).
...
protected:
// ~VideoDevice() { /* ... */ } // (*) interdire la destruction par la
base
public:
// virtual ~VideoDevice() { /* ... */ } // (**) autoriser (décommenter
selon)
VideoDeviceEnumerator::const_iterator ite = std::find(ite, end, "nom du
périphérique");
Bref, y'a sûrement d'autres erreurs... 'suis fatigué.
Peut-être fatigué, mais ça faisait un bout de temps que je me posais une question
Bref, y'a sûrement d'autres erreurs... 'suis fatigué.
Peut-être fatigué, mais ça faisait un bout de temps que je me posais une question
Bref, y'a sûrement d'autres erreurs... 'suis fatigué.
Peut-être fatigué, mais ça faisait un bout de temps que je me posais une question
Si cette classe est une classe de base il est vivement conseillé de
définir un destructeur, soit virtuel et public(*), soit non virtuel et
protégé(**). De plus, comme son nom le fait penser, cette classe gère
une ressource. Dans ce cas mieux vaut désactiver le constructeur de
copie et l'opérateur d'affectation. En résumé :
Où sont les données membres ? On peut pas deviner comme ça si tout est
rangé dans un std::map<std::string, VideoDevice*> ou autre.
Disons que c'est un map pour simplifier.
Si cette classe est une classe de base il est vivement conseillé de
définir un destructeur, soit virtuel et public(*), soit non virtuel et
protégé(**). De plus, comme son nom le fait penser, cette classe gère
une ressource. Dans ce cas mieux vaut désactiver le constructeur de
copie et l'opérateur d'affectation. En résumé :
Où sont les données membres ? On peut pas deviner comme ça si tout est
rangé dans un std::map<std::string, VideoDevice*> ou autre.
Disons que c'est un map pour simplifier.
Si cette classe est une classe de base il est vivement conseillé de
définir un destructeur, soit virtuel et public(*), soit non virtuel et
protégé(**). De plus, comme son nom le fait penser, cette classe gère
une ressource. Dans ce cas mieux vaut désactiver le constructeur de
copie et l'opérateur d'affectation. En résumé :
Où sont les données membres ? On peut pas deviner comme ça si tout est
rangé dans un std::map<std::string, VideoDevice*> ou autre.
Disons que c'est un map pour simplifier.
Disons que c'est un map pour simplifier.
Il n'y a pas de map
Par exemple, le code de GetVideoDevice
Ce qu'il faut faire je pense, c'est intégrer cette ligne dans la détection
du .end() et de l'opérateur ++
while(SUCCEEDED(pEm->Next(1, &pMoniker, &cFetched)) && pMoniker)
Je vais essayer de me débrouiller, on verra bien...
J'espérer pouvoir me débrouiller avec la STL...
Disons que c'est un map pour simplifier.
Il n'y a pas de map
Par exemple, le code de GetVideoDevice
Ce qu'il faut faire je pense, c'est intégrer cette ligne dans la détection
du .end() et de l'opérateur ++
while(SUCCEEDED(pEm->Next(1, &pMoniker, &cFetched)) && pMoniker)
Je vais essayer de me débrouiller, on verra bien...
J'espérer pouvoir me débrouiller avec la STL...
Disons que c'est un map pour simplifier.
Il n'y a pas de map
Par exemple, le code de GetVideoDevice
Ce qu'il faut faire je pense, c'est intégrer cette ligne dans la détection
du .end() et de l'opérateur ++
while(SUCCEEDED(pEm->Next(1, &pMoniker, &cFetched)) && pMoniker)
Je vais essayer de me débrouiller, on verra bien...
J'espérer pouvoir me débrouiller avec la STL...
class moniker_iterator {
public:
moniker_iterator(CComPtr<IEnumMoniker> const& pem) .. {
...
throw com_exception(hr);
...
}
moniker_iterator(moniker_iterator const& it){
...
throw com_exception(hr);
}
class moniker_iterator {
public:
moniker_iterator(CComPtr<IEnumMoniker> const& pem) .. {
...
throw com_exception(hr);
...
}
moniker_iterator(moniker_iterator const& it){
...
throw com_exception(hr);
}
class moniker_iterator {
public:
moniker_iterator(CComPtr<IEnumMoniker> const& pem) .. {
...
throw com_exception(hr);
...
}
moniker_iterator(moniker_iterator const& it){
...
throw com_exception(hr);
}
est-ce les évolutions en cours de la norme prévoir d'obligeation de
déclaration des exceptions lévées (localement ou héritées) par une méthode
?
ie:
moniker_iterator(moniker_iterator const& it)
throw (com_exception)
{
...
}
est-ce que cela pourra s'accompagner d'une obligeation de catch de la part
du code appelant (s'il ne redéclare pas les mêmes throw) ?
est-ce les évolutions en cours de la norme prévoir d'obligeation de
déclaration des exceptions lévées (localement ou héritées) par une méthode
?
ie:
moniker_iterator(moniker_iterator const& it)
throw (com_exception)
{
...
}
est-ce que cela pourra s'accompagner d'une obligeation de catch de la part
du code appelant (s'il ne redéclare pas les mêmes throw) ?
est-ce les évolutions en cours de la norme prévoir d'obligeation de
déclaration des exceptions lévées (localement ou héritées) par une méthode
?
ie:
moniker_iterator(moniker_iterator const& it)
throw (com_exception)
{
...
}
est-ce que cela pourra s'accompagner d'une obligeation de catch de la part
du code appelant (s'il ne redéclare pas les mêmes throw) ?
Des spécifications d'exception comme en java ? J'espère bien que non.
Herb Sutter résume bien bien la situation :
Des spécifications d'exception comme en java ? J'espère bien que non.
Herb Sutter résume bien bien la situation :
Des spécifications d'exception comme en java ? J'espère bien que non.
Herb Sutter résume bien bien la situation :
Des spécifications d'exception comme en java ? J'espère bien que non.
Herb Sutter résume bien bien la situation :
les 2 points sont liés ? Java fait une vérification à la compil.,
l'article ne parle que de vérification au runtime.
ma question portait sur un contrôle à la compilation.
Des spécifications d'exception comme en java ? J'espère bien que non.
Herb Sutter résume bien bien la situation :
les 2 points sont liés ? Java fait une vérification à la compil.,
l'article ne parle que de vérification au runtime.
ma question portait sur un contrôle à la compilation.
Des spécifications d'exception comme en java ? J'espère bien que non.
Herb Sutter résume bien bien la situation :
les 2 points sont liés ? Java fait une vérification à la compil.,
l'article ne parle que de vérification au runtime.
ma question portait sur un contrôle à la compilation.