假设我在一个模板中,我想知道类型参数 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
?