且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

如何判断模板类型是否是模板类的实例?

更新时间:2023-11-27 18:45:04

以下是一个选项:

#include <iostream>
#include <type_traits>
#include <string>

template <class, template <class> class>
struct is_instance : public std::false_type {};

template <class T, template <class> class U>
struct is_instance<U<T>, U> : public std::true_type {};

template <class>
class Second 
{};

int main()
{
    using A = Second<int>;
    using B = Second<std::string>;
    using C = float;
    std::cout << is_instance<A, Second>{} << '\n'; // prints 1
    std::cout << is_instance<B, Second>{} << '\n'; // prints 1
    std::cout << is_instance<C, Second>{} << '\n'; // prints 0
}

基本上,它将 is_instance 结构专用于作为模板实例化的类型.

It's basically specializing the is_instance struct for types that are instantiations of a template.