從如何檢查物件是否是 C 中多個模板引數的模板類的實體?我得到了以下特征來檢查一個型別是否是幾個模板引數的模板化型別的特定模板實體化:
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:
uj5u.com熱心網友回復:
你走在正確的軌道上:
#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>,只是為了一個例子。
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/478093.html
