可变函数,通过引用传递非POD,通过值传递POD

时间:2019-05-06 22:20:04

标签: c++ function

这本身不是问题,而更像是一个测试,以了解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类型。

是的,允许使用功能模板

0 个答案:

没有答案