형질의 디자인은 다른 무엇보다도 예술입니다. 여기 하드 및 빠른 답변이 없습니다. 나는이 문제가 답을 찾지 못했기 때문에 문제에 대해 더 많이 알지 못해서 좋은 대답을 드릴 수 없다고 말하면 당신이 풀고있다.
일반적으로 특성 클래스는 유용한 "사용자 지정 지점"입니다. 당신 템플릿을 설계하는 경우 즉, :
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>
};
의 사례가있다 둘 다 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
};
당신이 tile_traits에 비해 몇 가지 특징 다른 인 경우 다를 수 TileContainer의 유형을 강제로 할 때 고객이 같은 타일에 대해 서로 다른 특성이 필요하거나 수 있다는 것을 의심 익숙한.
용어 특성 - blob은 나에게 알려지지 않았습니다. 그것은 다른 질문에 언급되어 있습니다 http://stackoverflow.com/questions/1870627/type-traits-definition-traits-blobs-metafunctions – Suma