C++ 如何提取传入模板参数的类型?
在下面的代码中,我想将“something”替换为允许我将“f”的类型声明为在C中传递的第二个参数(同时将C传递给M的模板),即这里的floatC++ 如何提取传入模板参数的类型?,c++,c++11,templates,parameters,template-classes,C++,C++11,Templates,Parameters,Template Classes,在下面的代码中,我想将“something”替换为允许我将“f”的类型声明为在C中传递的第二个参数(同时将C传递给M的模板),即这里的float #include<iostream> using namespace std; template<class A, class B> class C{ public : A a; B b; }; template<class D> class M{ public :
#include<iostream>
using namespace std;
template<class A, class B>
class C{
public :
A a;
B b;
};
template<class D>
class M{
public :
decltype(D::<something>) f; //!!!!!!!!!!!!!!!!
void show(){cout<<f;}
};
int main(){
M<C<int,float>> m;
m.show();
}
#包括
使用名称空间std;
模板
C类{
公众:
A A;
B B;
};
模板
M类{
公众:
decltype(D::)f;/!!!!!!!!!!!!!!!!
void show(){cout模板取模板怎么样
通过以下行,您可以声明一个模板,并将后者的模板参数类型命名为:
template<
template<typename, typename> class D,
typename A, typename B>
有关更多信息,请查看答案。模板取模板怎么样
通过以下行,您可以声明一个模板,并将后者的模板参数类型命名为:
template<
template<typename, typename> class D,
typename A, typename B>
有关更多信息,请查看答案。您可以通过一些技巧来实现这一点
template<typename> class M; // leave undefined
template<template<typename, typename> D,
typename One,
typename Two>
class M<D<One, Two>> { // a specialisation
Two f;
};
模板类M;//保留未定义
模板
M{//a类专业
两个f;
};
现在,您可以传递给M
一个正好有两个模板参数的类(sich为C
)。如果传递其他参数(例如int
),则会出现错误。您可以通过一些技巧来实现这一点
template<typename> class M; // leave undefined
template<template<typename, typename> D,
typename One,
typename Two>
class M<D<One, Two>> { // a specialisation
Two f;
};
模板类M;//保留未定义
模板
M{//a类专业
两个f;
};
现在你可以传递给M
一个正好有两个模板参数的类(sich为C
)。如果你传递了其他一些参数(例如int
),就会出现错误。decltype(D::b)
对你来说足够好吗?不,没有看到。没有查看类C的定义。@QuentinIsdecltype(D::b)
对你来说足够好吗?不,没有看到。没有研究C类的定义。@quentin你能解释一下行模板中发生了什么,以及为什么你不必写M吗?你不写C
,因为M
第一个模板参数现在是一个模板,而n一个类。请记住,C
是一个模板,但C
不再是一个模板。它是一个完全成熟的类。请您解释一下行模板中发生了什么,以及为什么您不必写M?您不写C
,因为M
第一个模板参数是现在是一个模板而不是一个类。请记住,C
是一个模板,但C
不再是一个模板。它是一个成熟的类。