2016-05-16 40 views
0

我需要一些帮助实现我的程序设计。所以,我有我想要的一切在它的元组,从这个电话将元组传递给帮助类

auto t1 = getMyTuple(); 

创建,但我想打一个辅助类,这样我可以超载< <操作,这样,当我打电话

std::cout << my_tuple_helper; 

它会打印出每一件事。

我有一个辅助类,但我不知道怎么去T1到它..它看起来像

template<typename... Args> 
class my_tuple_helper 
{ 
    public: 
    std::tuple<Args...> my_tup; 

    my_tuple_helper(std::tuple<Args... t) 
    { 
    my_tup = t; 
    } 

//or 

    my_tuple_helper(Args... args) 
    { 
    my_tup = std::tuple<Args...>(args...); 
    } 

}; 

拥有这两个构造函数是我不知道如何通过模板创建时的问题

auto t1 = getMyTuple(); 
my_tuple_helper<???> mth(t1); 

我有东西,编译看起来像这样

template<typename T> 
class my_tuple_helper 
{ 
    public: 
    T my_tup; 

    my_tuple_helper(T t) 
    { 
    my_tup = t; 
    } 
}; 
:如果它的类型是汽车类的对象

,我可以打电话给

auto t1 = getMyTuple(); 
my_tuple_helper<decltype(t1)> mth(t1); 

但我不喜欢这样的事实是t可以是任何东西,我宁愿有一个std ::元组my_tup不是一件T my_tup(我甚至不知道这会工作) 。

有没有人有任何想法,我可以得到一个std ::元组存储到一个自动对象,我的助手类,使我可以作为一个std ::元组对象(在类中)访问它。

预先感谢您

回答

1

您可以针对

template<typename... Args> 
my_tuple_helper<Args...> 
make_my_tuple_helper(const std::tuple<Args...>& tup) 
{ 
    return my_tuple_helper<Args...>(tup); 
} 

做一个功能,使用它

auto t1 = getMyTuple(); 
auto mth = make_my_tuple_helper(t1); 
+0

谢谢我从来没有想过这个! – user2770808

1

通常的方式做到这一点是让其中推导一个工厂方法你的模板参数。所以,你会做my_tuple_helper这个样子的:

template<typename... Args> 
class my_tuple_helper 
{ 
    public: 
    std::tuple<Args...> my_tup; 

    my_tuple_helper(std::tuple<Args...> t) 
     : my_tup {std::move(t)} 
    { } 
}; 

然后写一个工厂方法是这样的:

template <typename... Args> 
my_tuple_helper<Args...> 
make_tuple_helper (const std::tuple<Args...>& t) 
{ 
    return { t }; 
} 

Live Demo

然后,如果你想输出你的元组,你能做到这一点的一个电话,像这样:

auto t1 = getMyTuple(); 
std::cout << make_tuple_helper(t1); 
+0

非常感谢,你的演示非常有用,并解决了我的问题:) – user2770808

相关问题