gho*_*der 3 c++ templates variadic-templates
一般而言,我刚接触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 )
Run Code Online (Sandbox Code Playgroud)
但是,假设我想使其更通用-意味着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 ,
.......) :
Run Code Online (Sandbox Code Playgroud)
但是我不知道如何表达XS与所有X1 ... XN之间的关系,因此实质上就像我现在这样构造类时:
MyClass< T, X1, X2 > local(.....)
Run Code Online (Sandbox Code Playgroud)
即使我通过X3,X4等,它也将继续工作。
不确定是否可行。
字段d_x1,d_x2,...不能有可变的数目;但是可以使用std::tuple以下方法解决:
#include <memory>
#include <tuple>
template< typename T, typename... XS >
class MyClass
{
std::shared_ptr<T> d_track;
std::tuple<std::shared_ptr<XS>...> d_xs;
public:
MyClass( std::shared_ptr< T > track ,
std::shared_ptr< XS >... xs ) ;
};
template< typename T, typename... XS >
MyClass< T, XS... >::MyClass( std::shared_ptr< T > track ,
std::shared_ptr< XS >... xs)
: d_track( track ) , d_xs( xs... )
{
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
81 次 |
| 最近记录: |