8
經常使用模板的時候,你最終的東西,如:C++模板的宏快捷
template <T>
class the_class
{
public:
// types
typedef T value_type;
typedef const value_type const_value_type;
typedef value_type& reference;
typedef const_value_type& const_reference;
typedef value_type* pointer;
typedef const_value_type* const_pointer;
...
};
這是同樣的東西很多的,不過,複製到許多不同的模板類的。這是值得創造的東西,如:
// template_types.h
#define TEMPLATE_TYPES(T) \
typedef T value_type; \
typedef const value_type const_value_type; \
typedef value_type& reference; \
typedef const_value_type& const_reference; \
typedef value_type* pointer; \
typedef const_value_type* const_pointer;
所以我剛纔類變爲:
#include "template_types.h"
template <typename T>
class the_class
{
public:
TEMPLATE_TYPES(T)
...
};
這似乎更清潔,並避免重複,當我做其他的模板類。這是一件好事嗎?或者我應該避免這種情況,只是複製粘貼typedefs?
謝謝,我甚至沒有想到這一點。 – Corey 2009-10-07 23:22:28
+1這也是爲什麼從一元函數和二元函數繼承函子的原因。我實際上有一個相關的問題,如何在**類中使用這些typedefs(假設它們是通過一些元編程巫術獲得的),但是來自http://www.parashift.com/c++-faq-lite/templates.html #faq-35.18它看起來沒有*有意義的方式...... – UncleBens 2009-10-07 23:29:49
-1從我這裏。由於「在相關基類中找不到名稱」問題,我不同意這種解決方案。每一個對這些成員之一的引用必須被限定如下:「typename template_defs ::」。例如,如果你想引用「const_reference」,你不得不說「typename template_defs :: const_reference」,這不是更好。但是,將宏版本與模板混合的解決方案可能沒問題。 –
2009-10-08 08:36:02