【问题标题】:Universal parameters in c++ function? [duplicate]c++函数中的通用参数? [复制]
【发布时间】:2017-09-09 14:59:24
【问题描述】:

我有一个函数1,它接受你给它的任何参数并显示它:

void function1(string a){
    std::cout << a;
}

void function1(int a){
    std::cout << a;
}

void function1(double a){
    std::cout << a;
}

void function1(char a){
cout << a;
}
void function1(float a){
    std::cout << a;
}

有没有办法调用一种通用变量,这样我就不需要写那么多代码了?

类似这样的:

void function1(UNIVERSAL a){
    std::cout << a;
}

【问题讨论】:

  • 阅读模板。
  • 有趣的是,如果简洁的概念语法将成为标准,我们可以通过定义一个包罗万象的UNIVERSAL 概念来编写与示例中所写完全相同的代码。
  • @user0042 我不认为这是一个好的骗局。虽然它解释了从哪里获得学习材料,但它根本没有解释什么是模板以及它们为什么适用于这种情况。
  • @Revolver_Ocelot 是的,我想知道为什么还没有找到更好的。可能是时候写一篇规范的问答或改进这个问题了。

标签: c++ function variables parameters


【解决方案1】:

Templates do exactly this!

template <typename T>
void function1(T const &t) {
    std::cout << t << '\n';
}

int main() {
    function1(123);
    function1(45.67);
    function1("foobar");
}

打印:

123
45.67
foobar

注意几点:

  1. 这需要你调用它的任何类型来支持&lt;&lt; 语法。如果没有,您可能会收到一些非常神秘的错误消息。
  2. 我通过reference-to-const传递参数,因为您支持任何类型,并且您不知道复制它是否会很大或很昂贵。

在编写模板时,请仔细考虑您对所使用的类型的要求。需求取决于您在功能实现中所做的事情。添加到函数时不要无意中引入新的需求。

【讨论】:

  • 太棒了!这做到了!非常感谢 BobTFish 和 Neil Butterworth!
猜你喜欢
  • 2015-03-28
  • 2016-09-07
  • 1970-01-01
  • 2010-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-15
  • 2011-11-30
相关资源
最近更新 更多