如何检查模板参数是否属于特定模板类型(多类型参数)
How to check if a template argument is of a particular templated type (multiple type parameters)
我昨天 () 问了一个问题,关于当参数是任何类型的模板化 class 时如何检查特定模板参数。解决方案是这样的:
template <typename T>
struct Animal{};
template <typename T>
struct IsAnimalOfAnyType
{
constexpr bool value() { return false; }
};
template <typename T>
struct IsAnimalOfAnyType<Animal<T>>
{
constexpr bool value() { return true; }
};
但是这适用于单参数模板,但我正在尝试执行以下操作:
template <typename T, T integer, typename U>
struct Animal{};
template <typename T>
struct IsAnimalOfAnyType
{
constexpr bool value() { return false; }
};
template <typename T>
struct IsAnimalOfAnyType<Animal<T>>
{
constexpr bool value() { return true; }
};
/* Animal needs to be Animal<T, integer, U>,
but 'T', 'integer' and 'U' template arguments are not available here,
and if I have these arguments here
then IsAnimalOfAnyType is no longer a specialization and it won't compile
*/
据我了解,区别在于 struct Animal:
- 有多个模板参数
和
- 其中一个参数不是类型,而是整数
该怎么做?
您可以声明 Animal
专业化所需的所有模板参数。
template <typename T, T integer, typename U>
struct IsAnimalOfAnyType<Animal<T, integer, U>>
{
constexpr bool value() { return true; }
};
我昨天 (
template <typename T>
struct Animal{};
template <typename T>
struct IsAnimalOfAnyType
{
constexpr bool value() { return false; }
};
template <typename T>
struct IsAnimalOfAnyType<Animal<T>>
{
constexpr bool value() { return true; }
};
但是这适用于单参数模板,但我正在尝试执行以下操作:
template <typename T, T integer, typename U>
struct Animal{};
template <typename T>
struct IsAnimalOfAnyType
{
constexpr bool value() { return false; }
};
template <typename T>
struct IsAnimalOfAnyType<Animal<T>>
{
constexpr bool value() { return true; }
};
/* Animal needs to be Animal<T, integer, U>,
but 'T', 'integer' and 'U' template arguments are not available here,
and if I have these arguments here
then IsAnimalOfAnyType is no longer a specialization and it won't compile
*/
据我了解,区别在于 struct Animal:
- 有多个模板参数 和
- 其中一个参数不是类型,而是整数
该怎么做?
您可以声明 Animal
专业化所需的所有模板参数。
template <typename T, T integer, typename U>
struct IsAnimalOfAnyType<Animal<T, integer, U>>
{
constexpr bool value() { return true; }
};