从类对象访问模板参数

时间:2018-09-17 13:41:42

标签: c++ templates class-template

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?

3 个答案:

答案 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)

#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;
}

#2

另一种方法是使用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;
}