템플릿 매개 변수로 다른 컨테이너를 사용하여 템플릿 클래스 (어댑터)를 어떻게 선언 할 수 있습니까? 예를 들어, I 클래스 선언 할 필요가 :템플릿 컨테이너가있는 템플릿 클래스
template<typename T, typename Container>
class MyMultibyteString
{
Container buffer;
...
};
을 그리고 벡터를 기반으로 내 그것을 원한다. 그것을 어떻게 하드 정의합니까? (누군가가 그러한 선언문을 작성하는 것을 막기 위해 MyMultibyteString<int, vector<char>>
).
또한, 이러한 건설 구현하는 방법 : 컨테이너 템플릿 인수를 통과하지 않고
MyMultibyteString<int, std::vector> mbs;
합니다. 이것은 당신이 쓸 수있는 것
template<typename T, template <typename, typename> class Container>
// ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
class MyMultibyteString
{
Container<T, std::allocator<T>> buffer;
// ...
};
:
정말 대단한 철저한 대답. –
@ScottJones : 유용하다는 것을 알았 기 때문에 기쁩니다 :) –
@ScottJones 귀하의 진술에 대해서 :'이것은 std :: set와 std :: vector'를 모두 받아 들일 수있는 하나의 단일 클래스 템플릿을 작성할 수 없다는 것을 의미합니다. variadic 템플릿은 문제를 해결합니까? http://stackoverflow.com/a/20499809/2436175 – Antonio