Ошибка при удалении зависимости проекта в VS2010

В текущем стандарте, как , уже не ответил , он не разрешен. Вот еще одно обходное решение для достижения чего-то подобного, определяя функцию как вариационную, вместо того, чтобы брать список инициализаторов.

#include 
#include 

// begin helper functions

template 
void add_to_vector(std::vector* vec) {}

template 
void add_to_vector(std::vector* vec, T&& car, Args&&... cdr) {
  vec->push_back(std::forward(car));
  add_to_vector(vec, std::forward(cdr)...);
}

template 
std::vector make_vector(Args&&... args) {
  std::vector result;
  add_to_vector(&result, std::forward(args)...);
  return result;
}

// end helper functions

struct S {
  S(int) {}
  S(S&&) {}
};

void bar(S&& s) {}

template 
void foo(Args&&... args) {
  std::vector args_vec = make_vector(std::forward(args)...);
  for (auto& arg : args_vec) {
    bar(std::move(arg));
  }
}

int main() {
  foo(S(1), S(2), S(3));
  return 0;
}

Шаблоны Variadic могут обрабатывать ссылки r-значения соответственно, в отличие от initializer_list.

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

37
задан Aneesh Narayanan 10 October 2012 в 11:31
поделиться