テンプレートを使用していて、タイプパラメータ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
ください。