【问题标题】:how to get the Args... from a c++ tuple如何从 C++ 元组中获取 Args...
【发布时间】:2016-06-10 05:32:59
【问题描述】:

我有一个接受可变参数模板参数的模板类。

template <typename... Args>
class Element
{
public:
    typedef std::tuple<Args...> Tuple;

    Element(const Args&... args)
         : mArgs(args...)
    {
    }

    Tuple mArgs;
};

是否可以从元组中获取 Args... 以及如何获取?

所以我能够在这样的情况下使用相同的构造函数:

Element<Foo, Bar> element1(foo, bar);
Element<Foo, Bar> element2( magic(element1.mArgs) );

【问题讨论】:

  • 看看 std::tie 但你必须知道参数是什么类型。
  • 看来你想要Element(const Tuple&amp; t) : mArgs(t) {}
  • 是的,第二个构造函数就可以了。不幸的是,这是一个基类,很多地方都需要提供第二个构造函数,...我希望找到一种方法来避免。

标签: c++ templates tuples


【解决方案1】:

只需编写一个完全符合您要求的复制构造函数?

请注意,编译器生成的复制构造函数已经允许这样做:

Element<Foo, Bar> element2(element1);

【讨论】:

  • 真正的类要复杂得多,当然,我可以从元组创建构造函数,如果我要求的东西是不可能的,我可能会做什么
  • 你可以自己写一个拷贝构造函数,这样你首先调用Args上的构造函数...然后调用一个拷贝。临时的很可能会被忽略,所以那里没有伤害。
【解决方案2】:

我相信没有办法完全做你想做的事。为此,您需要magic 来返回参数包。但是,参数包可能只出现在可变参数模板的上下文中。所以你需要制作一些可变参数模板包装器来提供包,这不是你想要的。

但是,我们有可能在这里有一个XY problem。因此,我建议您提供更多详细信息,以便我们尝试解决最初的问题。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 1970-01-01
相关资源
最近更新 更多