性狀的設計和其他任何東西一樣多。這裏沒有難度和 的快速答案。我相信這個問題一直沒有得到答覆,因爲它是 不可能給出一個很好的答案不知道了很多關於 你要解決的問題。
一般性狀類是有用的「定製點」。也就是說,如果你 正在設計一個模板:
template <class Tile>
class TileContainer
{
...
};
TileContainer
可能利用tile_traits<Tile>
對於小塊的一些性質。 而TileContainer
的客戶端可以專門tile_traits<MyTile>
爲了 溝通變化的屬性時,默認特質(如果存在) 是不正確的。
到目前爲止,我不認爲我已經說過任何你不知道的事情(從 來看你的問題的措辭)。
我覺得你的問題是:
你應該設計:
A)
template <class Tile, class Traits = tile_traits<Tile>>
class TileContainer
{
// uses Traits
};
或:
B)
template <class Tile>
class TileContainer
{
// uses tile_traits<Tile>
};
有實例d在C++ 03和即將到來的C++ 0x標準中發揮作用。
例A的設計:
template<class charT, class traits = char_traits<charT>,
class Allocator = allocator<charT>>
class basic_string; // both traits and Allocator are traits
template <class Codecvt, class Elem = wchar_t,
class Tr = char_traits<Elem>>
class wbuffer_convert;
template <class T, class Allocator = allocator<T>>
class vector; // Allocator is a A-trait that uses another
// B-trait internally: allocator_traits<Allocator>
template <class charT, class traits = regex_traits<charT>>
class basic_regex;
實例B設計:
template<class Iterator> struct iterator_traits;
template <class Alloc> struct allocator_traits;
template <class Ptr> struct pointer_traits;
template <class Rep> struct treat_as_floating_point;
template <class Rep> struct duration_values;
我唯一的建議是,有沒有正確或錯誤的設計。用途:
template <class Tile>
class TileContainer
{
// uses tile_traits<Tile>
};
當你確信你的客戶的需求總是可以通過專業 tile_traits<MyTile>
得到滿足。
用途:
template <class Tile, class Traits = tile_traits<Tile>>
class TileContainer
{
// uses Traits
};
當你懷疑你的客戶可能需要不同的性狀相同 瓷磚,或當你想強制TileContainer的類型是不同的,當 一些特質以外tile_traits是
用過的。
期限特徵二進制大對象是未知的我。這是另外一個問題http://stackoverflow.com/questions/1870627/type-traits-definition-traits-blobs-metafunctions – Suma 2011-02-13 16:31:04