Предположим, что я в шаблоне, и я хочу знать, является ли параметр типа T экземпляром конкретного шаблона, например std::shared_ptr
:
template<typename T>
void f(T&& param)
{
if (instantiation_of(T, std::shared_ptr)) ... // if T is an instantiation of
// std::shared_ptr...
...
}
Скорее всего, я хочу сделать этот тест как часть теста std:: enable_if:
template<typename T>
std::enable_if<instantiation_of<T, std::shared_ptr>::type
f(T&& param)
{
...
}
// other overloads of f for when T is not an instantiation of std::shared_ptr
Есть ли способ сделать это? Обратите внимание, что решение должно работать со всеми возможными типами и шаблонами, в том числе в стандартной библиотеке и в других библиотеках, которые я не могу изменить. Мое использование std::shared_ptr
выше - всего лишь пример того, что я могу сделать.
Если это возможно, как мне самому написать тест, т.е. реализовать instantiation_of
?