【问题标题】:Overload functions for different type arguments?不同类型参数的重载函数?
【发布时间】:2013-04-21 14:47:33
【问题描述】:

我正在考虑重载函数,这不是一种更快的执行方式吗,例如,在没有定义函数的情况下多次使用不同的参数和输出(int、float double ecc...)而上瘾。

更容易理解:

// 2 ints addiction

int addic(int & a, int & b) {
  int c;
  c = a + b;
  return c;
}

// 1 int + 1 float

float addic(int & a, float & b) {
  float c;
  c = a + b;
  return c;
}

不是更快的方法吗?我必须定义所有情况吗?

【问题讨论】:

  • 任何特定的编程语言?
  • 您能重新表述一下您的问题吗?我很难理解您将重载与什么进行比较。
  • 运算符超载?你说的是 C++ 吗?
  • 抱歉问题写得不好!
  • “不是更快吗?”你是在问是否有比你写的更快的方法,或者你写的是否比其他的更快?如果是后者:比什么更快?另外,当您说更快时,您是在谈论性能还是编程速度?

标签: c++ operators overloading


【解决方案1】:

这(为了避免代码重复)是模板存在的目的之一;这是一个示例,说明如何实现您用作示例的函数(在 C++11 中):

#include <type_traits> // for std::common_type
template<class T1, class T2>
std::common_type<T1, T2>::type addic(const T1& a, const T2& b)
{
    return a + b;
}

T1 将是您传递给函数的第一个参数的类型,而T2 将是第二个参数的类型。

std::common_type&lt;T1, T2&gt;::type 是 T1 和 T2 都可以转换为的类型。例如,如果添加floatint,则类型将为float

编辑:如果你想用向量做一些事情,你可以这样做:

template<class T>
void MyFunction(std::vector<T>& v)
{
    // do something with the vector v, for example:
    v.push_back(5);
}

【讨论】:

  • 感谢您的回答!很好,如果我有向量(只是模板)作为参数,它也会起作用吗?
  • @Tommaso Ferrari 是的,如果您以正确的方式操作,它会起作用。
  • 但是,如果我想用一个返回一个浮点数的浮点数的 int 上瘾,是否可以使用模板?
  • 我有一些问题,虽然我在compiler_options->settings->code_generation中设置了-std=C++11(我用的是dev-c)结果:#ifndef GXX_EXPERIMENTAL_CXX0X #error 此文件需要对 \ISO C++ 2011 标准的编译器和库支持。此支持目前是实验性的,必须使用 -std=c++11 或 -std=gnu++11 编译器选项启用。 #endif
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-01-24
  • 1970-01-01
  • 2015-05-01
  • 1970-01-01
  • 2021-02-18
  • 1970-01-01
  • 2021-12-10
相关资源
最近更新 更多