首页 > 解决方案 > 如何检查对象是否是 C++ 中模板类的实例?

问题描述

如何在不知道模板参数的情况下检查变量是否为模板类,所以在下面的示例中,我如何确定(证明)A<int> 是 A。

template <class T>
class A {/*----*/};

int main() {
    auto a1 = A<int>();
    bool is_a1_an_A = some_method(a1, A);
}

任何帮助是极大的赞赏。谢谢!

标签: c++

解决方案


使用专门的辅助类非常简单:

#include <type_traits>
#include <iostream>

template<typename T> class A {};

template<typename T>
struct is_a : std::false_type {};

template<typename T>
struct is_a<A<T>> : std::true_type {};


int main()
{
    auto a1=A<int>{};

    bool b1=false;

    std::cout << is_a<decltype(a1)>::value << std::endl;

    std::cout << is_a<decltype(b1)>::value << std::endl;
    return 0;
}

is_a专门用于模板参数,该参数是A. 非特化版是假特质,特化版是真特质,差不多就是这样。如果您不熟悉模板专业化的主题,这是一个相当复杂且深入的主题,应该在每一本优秀的 C++ 教科书中都有完整的解释,我推荐您在那里对这个主题进行全面而完整的讨论。


推荐阅读