형식 특성에 따라 템플릿 사양 사이에서 컴파일러를 선택할 수 있습니까? 예를 들어, 순차 형식 (string
s, vector
s, list
s 등)과 정수 유형에 대한 두 가지 템플릿 구현을 비교 함수라고 가정합니다. 각 유형의 유형에 대해 하나의 템플리트 특수화 만 가질 수 있습니까?조건에 의해 템플릿 특수화가 제한됨
template <class SeqT>
class Compare
{
public:
bool operator()(const SeqT& s1, const SeqT& s2) const
{
typename SeqT::const_iterator it1=s1.begin();
typename SeqT::const_iterator it2=s2.begin();
while(it1!=s1.end() && it2!=s2.end())
{
if(*it1<*it2) return true;
if(*it2<*it1) return false;
++it1; ++it2;
}
return it2!=s2.end();
}
};
template <class IntegerT>
class Compare
{
public:
bool operator()(IntegerT i1, IntegerT i2) const
{
return i1<i2;
}
};
template <class T, class Cmp = Compare<T> >
class SomeContainer
{
...
};
기본적으로 내가 찾고있는 부분은 템플릿 인수에 조건을 부과하여 부분적으로 템플릿을 특수화하는 방법입니다. 첫 번째 Compare<>
과 마찬가지로 std::basic_string<>
, std::vector<>
, std::list<>
및 두 번째 유형은 int
, unsigned
, short
, char
입니다. 그게 가능하니?
예. std :: enable_if를보십시오 – bolov
우선'std :: enable_if'를 생각했습니다. 그러나 유형의 종류를 나타내는 템플릿 매개 변수를 추가하는 것이 더 좋으며 기본 유형에서 "계산 된"TMP가 될 수 있다고 생각합니다. 그런 다음 전문화를 제공하십시오. –
시퀀스로 무엇을 의미합니까? for for (auto x : y) 구문을 사용하여 반복 할 수있는 객체를 의미합니까? – Yakk