有没有办法避免在构造函数的参数中使用类型时指定类模板参数?
我有:
template< typename T, typename X >
class myclass {
myclass( typename X ) {};
X myfunct() { return X(); };
};
所以有一些设计模式可以使用
实例化myclassmyclass< TType > myclass_object( x_object );
而不是
myclass< TType, XType > myclass_object( x_object );
感谢模板编程专家,这些东西有时真的让我很烦恼。
编辑:添加了X返回类型的功能,使情况更加清晰。
答案 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
可能会转换为X
或Y
。
myclass<int> x (123);
myclass<float> x (123);
您需要帮助函数或完整类型。
template <typename T> myclass<T> make_myclass (const T &);