Сохраните пакет параметров как ссылки на кортежи - PullRequest
0 голосов
/ 18 сентября 2018

Я пытаюсь сохранить пакет параметров ссылок lvalue из шаблона переменной для дальнейшего использования.

У меня сейчас работает следующее.

template <typename... Ts>
class Foo {
private:
        std::tuple<Ts...> m_args;
public:
       template<typename... Args>
       Foo(Args&&... args) : m_args(std::make_tuple(std::forward<Args>(args)...))
       {
       }
 };

 int main() {
     int x = 10;
     int y = 20;
     Foo<int, int> foo(x, y);
 }

Однако я хотел бы сохранить пакет параметров в качестве справки, чтобы позже я мог получить доступ к тому же объекту. Я не уверен, как я могу это сделать. Любая помощь будет оценена.

1 Ответ

0 голосов
/ 18 сентября 2018

Лучшее, что я могу себе представить, это использование std::forward_as_tuple.

К сожалению, я не вижу способа использовать его с идеальной пересылкой: если вы хотите зарегистрировать значения в кортеже внутри класса,вы должны выбрать тип кортежа один раз для всех.

Лучшее, что я могу себе представить, это кортеж константных ссылок;что-то вроде следующего:

template <typename ... Ts>
class Foo
 {
   private:
      std::tuple<Ts const & ...> m_args;

   public:
      Foo (Ts const & ... as) : m_args{std::forward_as_tuple(as...)}
       { }
 };

Надеюсь, нет необходимости, помните, как висячие ссылки могут быть опасны для решения, основанного на кортеже ссылок.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...