从 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>
,只是为了举例。