我發現自己編寫了很多類型別名(typedefs)來使代碼更易於更改,但同時也有一些東西讓我避免這樣做,因爲它可能會爲將要使用/在我的代碼上。編寫大量類型別名是不好的做法嗎?
也許不是最好的例子,但看看here。我還會舉一個更近的例子。這些都是一些類我擺弄周圍,同時建立一個XML解析器:
namespace XML
{
struct Attribute
{
typedef std::string name_t;
typedef std::string value_t;
Attribute(const name_t &name, const value_t &value = "");
name_t name;
value_t value;
};
}
namespace XML
{
class Element
{
private:
typedef std::list<Attribute> attribute_container;
typedef std::list<Element> element_container;
public:
typedef attribute_container::iterator attribute_iterator;
typedef attribute_container::const_iterator const_attribute_iterator;
typedef element_container::iterator element_iterator;
typedef element_container::const_iterator const_element_iterator;
typedef std::string name_t;
typedef std::string data_t;
...
private:
name_t _name;
data_t _data;
attribute_container _attributes;
element_container _child_elements;
處事這樣可以更容易地編寫代碼,也許它使得有些直觀的,但什麼是這種做法的缺點?
它增加了間接的級別,這樣讀取代碼的人就不得不看兩件事而不是一件事。是不是真的值得嗎?有經驗的C++開發人員會立即識別'std :: list'。 –
2012-07-30 19:12:29
@RobertHarvey:是的,但另一方面是,如果代碼曾經想要使用不同的容器,那麼在容器上創建迭代器的每個地方都需要進行更改(例如)。 – jxh 2012-07-30 19:15:07
如果它有幫助,它是好的,否則它是不好的。摩擦是知道的區別。例如,混淆字符串就會讓我煩惱。 – Duck 2012-07-30 19:15:15