【问题标题】:Retrieving values of stored tuple with auto c++使用自动 C++ 检索存储元组的值
【发布时间】:2015-03-19 09:51:33
【问题描述】:

如果我在一个类中存储一个元组:

class BaseA { } //So that I can store A in a class

template <typename Args...>
class A : public BaseA {
public:
    //I'm omitting the constructors
private:
    std::tuple<Args...> storedTup;
}

您以后能通过类似的方式来检索这些值吗?

//Change BaseA
class BaseA {
public:
    virtual ~BaseA(){}
    auto returnTuple();
}

//Change A
template <typename Args...>
class A : public BaseA {
public:
    auto returnTuple() -> decltype(storedTup) {
        return storedTup;
    }
private:
    std::tuple<Args...> storedTup;
}

我知道这不起作用,但我忽略了一个简单的解决方法。据我所见,decltype 可以使用通过函数传递的成员(在我的情况下为 returnTuple),但由于我的元组已经存储,这并没有真正的帮助。是否有另一种方法可以使自动返回类型成为元组的类型?

【问题讨论】:

标签: c++ templates base-class stdtuple


【解决方案1】:

由于returnTuple() 需要有一个统一的返回类型,不,你不能这样做。您需要想出某种方法以统一的方式表达元组,可能是通过多态类型或可区分联合的向量等。

【讨论】:

  • 即使在 C++14 中使用 auto ?我以为我读到那是他们添加的内容。我会找一篇文章,等一下。 en.wikipedia.org/wiki/C%2B%2B14#Function_return_type_deduction
  • @TrevorPeyton:是的,您可以推断出返回类型。但它必须是单一类型。 autoBaseA::returnTuple() 中会解析成什么类型​​?
  • std::tuple。如果您知道 args,则可以返回:std::tuple。这就是 auto 会做的事情,特别是如果我可以用 decltype 定义它。 --- 抱歉,这应该被 A 覆盖。
  • 但是BaseA 没有或不知道Args...。所以你有一个矛盾,一个不可能。
  • 好吧,如果 auto 意味着编译器找到了我认为编译器可以派生该类型的类型。不过这只是猜测。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-04-22
  • 2015-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-11
  • 2011-04-25
相关资源
最近更新 更多