Это не вопрос сам по себе, а скорее как проверка, чтобы увидеть, возможна ли функция в 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-типы.
Да, шаблоны функций разрешены