获取模板实例化的类型?

时间:2010-05-21 20:20:55

标签: c++ templates

我有以下情况:

我有一个MyClass类型的对象,它有一个将自身强制转换为基类的方法。该类包括其基类的typedef和执行upcast的方法。

template <class T, class B>
class BaseClass;

template <class T>
class NoAccess;

template <class T>
class MyClass : public BaseClass<T, NoAccess<T> >
{
  private:
    typedef BaseClass<T, NoAccess<T> > base;

  public:
    base &to_base();
};

我需要将base调用的结果传递给仿函数Operator

template <class Y>
class Operator
{
   Operator(Y &x);
};

Operator<???> op(myobject.to_base());

如果我不想使用NoAccess,是否有一种简单的方法来填充???

3 个答案:

答案 0 :(得分:3)

您可以定义工厂函数以使用类型推导:

template< class Y >
Operator<Y> create_operator( Y &y ) {
    return Operator<Y>( y );
}

答案 1 :(得分:3)

我看到三种可能性:

  1. 使MyClass<T,B>::base成为public标识符

  2. 更改运算符并使用类型擦除使构造函数成为模板(可能很难):
    class Operator { template<class Y> Operator(Y &x); }

  3. 将创建Operator对象的代码移动到自己的函数模板中:
    template<typename T> Operator<T> createOperator(const T& base)
    {return Operator<T>(base);}

答案 2 :(得分:2)

您可以将typedef公开:

Operator<MyClass<type>::base> op(myobject.to_base());
相关问题