部分避免类模板参数(从构造函数参数推断)

时间:2011-07-06 17:28:33

标签: c++ class templates

有没有办法避免在构造函数的参数中使用类型时指定类模板参数?

我有:

template< typename T, typename X >
class myclass {
  myclass( typename X ) {};
  X myfunct() { return X(); };
};

所以有一些设计模式可以使用

实例化myclass
myclass< TType > myclass_object( x_object );

而不是

myclass< TType, XType > myclass_object( x_object );

感谢模板编程专家,这些东西有时真的让我很烦恼。

编辑:添加了X返回类型的功能,使情况更加清晰。

3 个答案:

答案 0 :(得分:2)

只有当你不需要知道你班上其他人的第二种类型时。

template< typename T >
class myclass {
  template < typename X >
  myclass( typename X ) {};
};

这是有效的,因为第二个模板是一个函数,对于函数,如果可以,编译器将从常规参数的类型中推导出模板参数。在这种情况下它可以。

答案 1 :(得分:1)

使用辅助函数推导出参数类型并显式指定类实例化。有关示例,请参阅std::make_pair

答案 2 :(得分:0)

排序答案:没有。 myclass<X>的构造无法推断出myclass<Y>Z,因为Z可能会转换为XY

myclass<int> x (123);
myclass<float> x (123);

需要帮助函数或完整类型。

template <typename T> myclass<T> make_myclass (const T &);