【发布时间】:2019-05-09 01:05:57
【问题描述】:
一般来说,我是使用 C++ 模板的新手,遇到了可变参数模板,想知道是否有适合我的需要。
我有这个代码并且工作正常:
template< typename T, typename X1, typename X2 >
class MyClass
{
public :
MyClass( std::shared_ptr< T > track ,
std::shared_ptr< X1 > x1 ,
std::shared_ptr< X2 > x2 ) ;
}
template< typename T, typename X1, typename X2 >
MyClass < T,X1,X2 >::MyClass( std::shared_ptr< T > track ,
std::shared_ptr< X1 > x1 ,
std::shared_ptr< X2 > x2 ) : d_track( track ) , d_x1( x1), d_x2( x2 )
但是假设我想让它更通用 - 这意味着 X1,X2 可以是一个随机数 - 例如我可以拥有 X3 和 X4。我想避免为我可能遇到的所有不同情况重复构造函数,因为它们尚不知道 - 可变参数模板是解决这个问题的方法吗?
在草稿代码中,我的意思是:
template< typename T, typename... XS >
MyClass < T,???? >::MyClass( std::shared_ptr< T > track ,
std::shared_ptr< ?? > x1 ,
std::shared_ptr< ?? > x2 ,
.......) :
但我不知道如何表达 XS 和所有 X1...XN 之间的关系,所以本质上当我像现在这样构造我的类时:
MyClass< T, X1, X2 > local(.....)
这将继续工作,即使我通过 X3、X4 等。
不确定这是否可能。
【问题讨论】:
-
什么是 XS?它与 X1...XN 有什么关系?
-
@MaxLanghof 可能没有 - 我想要的是避免添加一个带有 x1、x2、x3 的模板构造函数 - 另一个带有 x1、x2、x3、x4 等的模板构造函数
标签: c++ templates variadic-templates