pragma une fois
#include "stdafx.h"
#include "Token.h"
//I would like this enum to be inside class Number
enum Number_enm {ZERO, ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE};
class Number : public Token<Number_enm>//and this template parameter to be Number::Number_enm
{
private:
public:
Number(const Number_enm& num)
try:
Token(num)
{ }
catch(...)
{
cerr << "Error in Number::Number(const Number_enm&).";
return;
}
Number(const char num)
try:
Token(static_cast<Number_enm>(num & 0xf)) //get number value from char
{
#ifdef DEBUG_
cout << "Converting ctor, from char to Token.\n";
#endif
}
catch(...)
{
cerr << "Error in Number::Number(const char num).";
return;
}
};
#pragma once
/*Abstract class*/
template<class T>
class Token
{
typedef T value_type;
private:
value_type my_data_;
protected:
/*Token()
try: my_data_()
{ }
catch(...)
{
cerr << "Error in Token<T>::Token().";
return;
}*/
Token(const value_type value)
try:
my_data_(value)
{ }
catch(...)
{
cerr << "Error in Token<T>::Token(const value_type&).";
return;
}
/*Token(const Token& value): my_data(value)
{ }*/
Token& operator=(const Token& right)
{
#ifdef DEBUG_
cout << "Token& operator=(const Token& right).\n";
#endif
my_data = right;
return my_data;
}
public:
T get() const
{
return my_data_;
}
T set(const T& new_value)
{
T old = my_data_;
my_data_ = new_value;
return old;
}
};
Je me demande s'il est possible de faire ce genre de construction?ENUM interne comme paramètre de modèle de classe de base
Ok, merci pour votre aide. J'ai lu à propos du bloc try catch dans ctor, dans deux livres et un article (ne me souviens pas lequel, mais c'était un article écrit par Scott Meyers), un livre de Bjarne second par Meyers. Il est catégorique que ce soit une bonne idée, pourquoi dites-vous que c'est une mauvaise idée? –
Eh bien, j'ai lu tous les livres de Meyers et tous les Stroustrup sauf le dernier, et je n'ai jamais lu aucun d'entre eux en disant une telle chose. Le problème avec le bloc catch du constructeur est qu'il ne fait rien d'utile. En C++, vous ne devriez pas utiliser try & catvch mutch de toute façon - vous devriez plutôt utiliser RAII, que Meyers et BS discutent longuement dans tous leurs livres. –
Je vais prendre en compte ce que vous avez dit. N'avez pas vraiment le temps, de parcourir ces livres pour vous envoyer des pages dans lesquelles ils expliquent cette construction. –