模板模板 class 专业化
template template class specialization
我刚刚学习模板 class 专业化。问题不大,不详细解释。根据我的理解,std::uniform_int_distribution
是一个模板,而 std::uniform_int_distribution<Type>
是 uniform_int_distribution
给出类型的完全专业化。我在专业化 class 模板中将其传递如下
主要class
template <template <class> class Distribution,
class Type,
class Engine = std::mt19937>
class random_gen
{
....
}
专业化 class
template <class Type, class Engine>
class random_gen<std::uniform_real_distribution<Type>, Type, Engine>
{
...
}
出现的错误是:
type/value mismatch at argument 1 in template parameter list for 'template<template<class> class Distribution, class Type, class Engine> class random_gen'
专业化仍然需要是模板模板参数。你传递了一个完整的类型。你想要:
template <class Type, class Engine>
class random_gen<std::uniform_real_distribution, Type, Engine>
{
...
};
只是 std::uniform_real_distribution
,而不是 std::uniform_distribution<Type>
。
我刚刚学习模板 class 专业化。问题不大,不详细解释。根据我的理解,std::uniform_int_distribution
是一个模板,而 std::uniform_int_distribution<Type>
是 uniform_int_distribution
给出类型的完全专业化。我在专业化 class 模板中将其传递如下
主要class
template <template <class> class Distribution,
class Type,
class Engine = std::mt19937>
class random_gen
{
....
}
专业化 class
template <class Type, class Engine>
class random_gen<std::uniform_real_distribution<Type>, Type, Engine>
{
...
}
出现的错误是:
type/value mismatch at argument 1 in template parameter list for 'template<template<class> class Distribution, class Type, class Engine> class random_gen'
专业化仍然需要是模板模板参数。你传递了一个完整的类型。你想要:
template <class Type, class Engine>
class random_gen<std::uniform_real_distribution, Type, Engine>
{
...
};
只是 std::uniform_real_distribution
,而不是 std::uniform_distribution<Type>
。