Функция Variadic, которая передает не POD по ссылке и POD по значению - PullRequest
1 голос
/ 07 мая 2019

Это не вопрос сам по себе, а скорее как проверка, чтобы увидеть, возможна ли функция в C ++.

Может ли быть создана функция, которая:

  • принимает несколько аргументов.
  • анализирует каждый не-POD аргумент по значению.
  • анализирует каждый POD-аргумент по ссылке (не копирует аргумент).

Я попытался несколько решений, но все не удалось в одном случае сценария или другого.


В конце я хочу, чтобы структура для решения была похожа на код ниже:

class Person {};

// Niladic: 0 Arguments
void array()

// Monoadic: 1 Arguments
void array(Person& element) {}
template <typename type> void array(type element) {}

// Variadic: Multiple Arguments --- How do we go about it?
void array(...) {}

int main(int argc, char* argv[]) {
    // WORKS!
    array();
    array(Person());
    array(1);

    // ... --- How to go about this?
    array(1, Person(), Person());
    array(Person(), 2, Person());
    array(Person(), Person(), 3);

    array(1, 2, Person());
    array(Person(), 2, 3);

    array(Person(), Person(), Person());

    return 0;
}

Цель этой функции заключается в том, что она анализирует не POD-типы без повторного вызова их пар конструктор-деструктор (не «копирует» объект),

, и что она также может передавать POD-типы.

Да, шаблоны функций разрешены

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