myclass.hpp中有一个班级模板:
template<class T, class P>
class myclass
{
....
};
在main.cc中,我创建了一个类的对象:
myclass<int, double> mc;
otherfunc<myclass>(mc);
在其他一些头文件header1.hpp中:
template<class MyClass>
void otherfunc(MyClass const &mc)
{
/* Access through 'mc' the underlying template parameters T and P*/
}
如何访问header1.hpp中的模板参数T和P?
答案 0 :(得分:2)
如何访问header1.hpp中的模板参数T和P?
在类public
中提供myclass
类型定义:
template<class T, class P>
class myclass
{
public:
typedef T T_type;
typedef P P_type;
....
};
因此,您可以通过
来访问这些类型。typename myclass::T_Type x;
typename myclass::P_Type y;
在其他地方。
答案 1 :(得分:1)
示例:
$(location @jacoco//:jacoco-runtime.jar)
或者:
template<class T, class P>
void otherfunc(myclass<T, P> const &mc)
{}
答案 2 :(得分:1)
一种方法是在myclass
中键入def。
template<class T, class P>
class myclass
{
public:
typedef T typeT;
typedef P typeP;
};
像这样引用他们
template<class MyClass>
void otherfunc(MyClass const &mc)
{
typename MyClass::typeT myMember;
}
另一种方法是使用decltype
。您可能实际上并不需要使用模板参数,而是打算使用与myclass
成员相同的类型或其返回值。因此,如下所示:
template<class T, class P>
struct myclass
{
T memberT;
P memberP;
};
template<class MyClass>
void otherfunc(MyClass const &mc)
{
using T = decltype(MyClass::memberT);
using P = decltype(MyClass::memberP);
T var1;
P var2;
}