C 11和类构造函数中的variadic模板
Variadic templates in C++ 11 and class constructors
我是新手使用C 模板的新手,并且遇到了variadic模板,并且想知道是否有适合我的需求。
我有此代码,并且工作正常:
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。我想避免在我可能尚不清楚的所有不同情况下复制构造函数 - variadic模板是解决方案吗?
在草稿代码中,我的意思是:
template< typename T, typename... XS >
MyClass < T,???? >::MyClass( std::shared_ptr< T > track ,
std::shared_ptr< ?? > x1 ,
std::shared_ptr< ?? > x2 ,
.......) :
,但我不知道如何表达XS与All X1 ... Xn之间的关系,因此,从本质上讲,当我像现在一样构造我的班级时:
MyClass< T, X1, X2 > local(.....)
即使我通过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... )
{
}
相关文章:
- Variadic模板未编译
- variadic模板中的模板参数推导失败
- std::绑定variadic模板和自动返回类型
- is_same和variadic模板编译时错误无效转换
- 限制variadic模板类中的构造函数访问
- variadic模板代码中的GCC VS MSVC编译误差
- 使用variadic模板和运行时索引构造iterator_range
- 将variadic模板功能转换为许多具体功能
- variadic模板折叠程序在GCC9中失败
- 如何在variadic模板参数中找到所有类的对象
- 如何访问variadic模板函数中的参数
- 来自整数的variadic模板参数
- 功能采用variadic模板包将std :: strings转换为const char *
- 如何解释variadic模板中的继承
- 示例自定义共享_ptr-我如何传递构造函数参数 - 我在此处使用variadic模板
- C 11和类构造函数中的variadic模板
- variadic模板歧义 - 空参数包
- variadic模板扩展,继承和std :: unique_ptr
- 功能模板与Variadic模板过载:Intel C 编译器版本18产生的结果不同于其他编译器.英特尔是错误的
- G 和Clang 不同的行为,指向Variadic模板功能的指针