我有以下情况:
我有一个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,是否有一种简单的方法来填充???
?
答案 0 :(得分:3)
您可以定义工厂函数以使用类型推导:
template< class Y >
Operator<Y> create_operator( Y &y ) {
return Operator<Y>( y );
}
答案 1 :(得分:3)
我看到三种可能性:
使MyClass<T,B>::base
成为public
标识符
更改运算符并使用类型擦除使构造函数成为模板(可能很难):
class Operator { template<class Y> Operator(Y &x); }
将创建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());