Я пытаюсь написать одну функцию шаблона, которая отлично работает в обоих случаях. У меня есть две функции:Условное генерирование кода в функции шаблона
template <typename T>
Check(T&)
template <typename U, typename V>
Check(U&, V&)
У меня есть функция, которую я хотел бы написать один реализации, где в случае любого другого типа, чем пары, я хочу, чтобы это назвать Check (T &), и если у нас есть std :: pair, тогда он должен вызывать два варианта параметра Check. Другими словами, код типа:
void SomeFunction() {
...
if (type(x) is std::pair<U,V>)
Check(x.first, x.second);
else
Check(x);
...
}
Есть ли способ выполнить это поведение с использованием магии шаблонов? Код предпочтительно должен работать с C++ 11. У меня есть код для функций проверки, и они являются внутренними для класса, поэтому я могу настроить их интерфейс, если это необходимо.