Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C+中的可变模板+;11和类构造函数 我是新的使用C++模板,一般来说,遇到了各种各样的模板,想知道是否有适合我的需求。_C++_Templates_Variadic Templates - Fatal编程技术网

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等的模板构造函数