編譯一次
#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;
}
};
我不知道是否有可能做這樣的建築呢?內部枚舉作爲基類模板參數
好的,謝謝你的幫助。我讀過關於ctor中的try catch塊,有兩本書和一篇文章(不記得哪一篇是Scott Meyers撰寫的文章),還有Meyer寫的Bjarne第二本書。堅持認爲這是一個好主意,爲什麼你說這是個壞主意? – 2009-12-12 16:32:12
嗯,我讀過除了最後一張之外的所有邁耶斯書和所有Stroustrups,我從來沒有讀過任何一個這樣的事。構造器catch塊的問題是它沒有做任何有用的事情。在C++中,你不應該使用try&catvch mutch - 相反,你應該使用RAII,Meyers&BS在他們所有的書中都會廣泛討論。 – 2009-12-12 16:36:39
我會採取你說的話。真的沒有時間,通過這本書來發送你的頁面沒有在他們解釋說,建設。 – 2009-12-12 16:44:33