c++ - 如何检查一个对象是否是多个模板参数的模板类的实例,并且其中一个参数满足某些条件?

https://stackoverflow.com/questions/72279095/how-to-check-if-an-object-is-an-instance-of-a-template-class-of-multiple-templat/72279177#72279177我得到了以下特征来检查一个类型是否是几个模板化类型的特定模板实例化模板参数:

template <typename T1, typename T2>
struct A
{
};

template <typename Type>
struct IsA: std::false_type
{
};

template <typename T1, typename T2>
struct IsA<A<T1, T2>> : std::true_type
{
};

如何另外添加第二种类型 T2 满足其他条件的条件?我试着做

template <typename Type>
struct IsA: std::false_type
{
};

template <typename T1, typename T2, std::enable_if_t<SomeCondition<T2>::value>>
struct IsA<A<T1, T2>> : std::true_type
{
};

但我得到了错误

error: template parameters not deducible in partial specialization:

回答1

你走在正确的轨道上:

#include <type_traits>
#include <iostream>

template <typename T1, typename T2>
struct A
{
};

template <typename Type, typename=void>
struct IsA: std::false_type
{
};

template <typename T1, typename T2>
struct IsA<A<T1, T2>, std::enable_if_t<std::is_same_v<T2, int>>>
    : std::true_type
{
};

int main()
{
    std::cout << IsA<int>::value << "\n";

    std::cout << IsA<A<char, char>>::value << "\n";

    std::cout << IsA<A<char, int>>::value << "\n";
    return 0;
}

在这个简单的例子中,“某些条件”只是一个 std::is_same_v<T2, int>,只是为了举例。

相似文章

随机推荐

最新文章