C+中的可变模板+;11和类构造函数 我是新的使用C++模板,一般来说,遇到了各种各样的模板,想知道是否有适合我的需求。
我有此代码,工作正常:C+中的可变模板+;11和类构造函数 我是新的使用C++模板,一般来说,遇到了各种各样的模板,想知道是否有适合我的需求。,c++,templates,variadic-templates,C++,Templates,Variadic Templates,我有此代码,工作正常: 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 ) ; } temp
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 )
模板
类MyClass
{
公众:
MyClass(std::shared_ptr轨道,
std::shared_ptrX1,
std::共享(ptrX2);
}
模板
MyClass:MyClass(std::shared_ptr轨道,
std::shared_ptrX1,
std::shared_ptrX2):d_轨道(轨道),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 ,
.......) :
模板
MyClass::MyClass(std::shared_ptr轨道,
标准::共享ptr<??>x1,
标准::共享ptr<??>x2,
.......) :
但我不知道如何表达XS和所有X1…XN之间的关系,因此在本质上,当我像现在这样构造我的类时:
MyClass< T, X1, X2 > local(.....)
MyClasslocal(…)
这将继续工作,即使我通过X3、X4等
但不确定这是否可行。不能有可变数量的字段d_x1、d_x2。。。;但这可以通过使用
std::tuple
:
#包括
#包括
模板
类MyClass
{
std::共享ptr d_轨道;
std::元组d_xs;
公众:
MyClass(std::shared_ptr轨道,
std::shared_ptr…XS);
};
模板
MyClass::MyClass(std::shared_ptr轨道,
std::shared_ptr…XS)
:d_轨道(轨道),d_x(x…)
{
}
什么是XS?它与X1…XN有什么关系?@MaxLanghof可能没有-我想要的是避免添加带有X1,x2,x3的模板构造函数-另一个带有X1,x2,x3,x4等的模板构造函数