C++ 中的变量包

Variable pack in C++

C++中已经有参数包,我可以根据参数包声明一个变量包吗?

例如,

template<typename... Args>
bool all(Args... args)
{
    // Is the following definition of member_a possible?
    auto const & member_a = args.a; ... 
    return (... (member_a.isValidState() && member_a.isStateStable())); 
}

编辑

或者稍微复杂一点,

template<typename... Args>
bool all(Args... args)
{
    // function returnCurrentOrLast can be expensive, so it's 
    // desired to call it once.
    auto const & a = args.returnCurrentOrLast(true); ... 
    return (... (a.isValidState() && a.isStateStable())); 
}

是的,您可以使用 pack expansion in lambda init-capture 来做到这一点。

#include <utility>

template<typename... Args>
bool all(Args... args) {
  return [&...member_a = std::as_const(args.a)] {
    return (... && (member_a.isValidState() && member_a.isStateStable())); 
  }();
}

Demo.

您可以使用元组来存储它们,但在您的示例中,您可以直接在 args.

上访问 isValidStateisStableState
#include <tuple>

template<typename... Args>
bool all(Args... args)
{
    auto tuple_members = std::make_tuple(args.a...); // This works, but why?
    return (... && (args.a.isValidState() && args.a.isStateStable())); 
}