C++ 如何进行模板化类型化参数专门化?
我有以下代码:C++ 如何进行模板化类型化参数专门化?,c++,templates,metaprogramming,template-meta-programming,C++,Templates,Metaprogramming,Template Meta Programming,我有以下代码: #include <tuple> #include <utility> #include <iostream> template<class T> struct e { }; template <> struct e<int N> { static const int value = N; }; int main() { std::cout << e<5>::v
#include <tuple>
#include <utility>
#include <iostream>
template<class T>
struct e {
};
template <>
struct e<int N> {
static const int value = N;
};
int main() {
std::cout << e<5>::value << std::endl;
}
#包括
#包括
#包括
模板
结构e{
};
模板
结构e{
静态常数int值=N;
};
int main(){
std::cout您已经为主模板指定了一个typename,因此不能专门指定int的值。您的主模板必须是
template <int N>
struct e
{ static const int value = N; };
如果已为主模板指定了typename,则不能专门指定int的值。主模板必须是
template <int N>
struct e
{ static const int value = N; };
您已经反转了术语
是一个非类型模板参数。请解释下一票,以便我可以改进我的问题。您已经反转了术语
是一个非类型模板参数。请解释下一票,以便我可以改进我的问题。为什么我们需要整数常量包装器?来生成值5到类型中。5不是类型。5是int类型的常量值,并且您的主模板希望使用类型而不是值进行实例化。嗯,好的,这开始变得更有意义了。Tenplate重载似乎不会发生在模板块上,而是只发生在struct u typename之后,这一切都与主模板有关。如果pects 1参数是一个类型,那么您的[partial]专门化必须全部归结为一个类型参数。在部分专门化的情况下,您可以“提取”任何您想要的参数(例如,专门化可以有10个参数),只要它们是可推断的(在本例中,它是一个名为“N”的“int”。但最终的组合(在结构e之后的位中)必须与主模板所期望的匹配。在本例中为单一类型。为什么我们需要一个整型常量包装器?将值5转换为一个类型。5不是一个类型。5是int类型的常量值,并且您的主模板希望用一个类型而不是值实例化。嗯,好的,这开始更有意义了。Tenplate o过度加载似乎不会发生在模板块上,但只会发生在struct\uuu typename之后,这是主模板的全部内容。如果这需要1个类型参数,那么您的[部分]专门化必须全部归结为1个类型参数。在部分专门化的情况下,您可以根据需要“拉出”任何参数(例如,专门化可以有10个参数),只要它们是可推断的(在本例中,它是一个名为“N”的“int”。但最终的组合(在结构e之后的位中)必须与主模板所期望的匹配。在本例中,为单一类型。
#include <iostream>
#include <type_traits>
template<class T>
struct e {
};
template <int N>
struct e<std::integral_constant<int,N> > {
static const int value = N;
};
int main() {
std::cout << e<std::integral_constant<int,5>>::value << std::endl;
}