【问题标题】:One function that can be called with multiple function psuedonames/synonyms [duplicate]一个可以用多个函数假名/同义词调用的函数[重复]
【发布时间】:2021-09-15 00:39:41
【问题描述】:

首先,这完全是为了好玩,我猜几乎没有什么实际用途。

我正在尝试做的是。有 1 个函数,但我可以用不同的函数假名来调用它。

所以不要这样做:

calculate_result(int x, int y);

我也可以:

calculate_answer(int x, int y);

或者我什至可以这样做:

calculation(int x, int y);

所有这些都会导致相同的功能:

int calculate(int x, int y)
{
answer = x + y;
return answer;
}

所以

int main()
{
int num1 = 5;
int num2 = 5;
int output =  (calculate_result(num1, num2) + calculate_answer(num1, num2) + calculation(num1, num2));
cout << output;
return 0;

}

我认为模板可能可以用于此目的? 有没有办法做到这一点?

【问题讨论】:

标签: c++ function c++11 templates methods


【解决方案1】:

答案是:指向函数的指针。

#include <iostream>
using namespace std;

int calculate(int x, int y)
{
  int answer = x + y;
  return answer;
}

int main() 
{
  // calculate_answer can now be used as a synonym to calculate
  auto calculate_answer = calculate;
  cout << calculate_answer(3, 4) << endl;
  return 0;
}

【讨论】:

  • 哦,这真的很酷。
  • 有几种解决方案。
  • @prehistoricpenguin 还有什么?
【解决方案2】:

其中一种可能的解决方案是使用在功能性头文件下定义的 bind()。 下面是代码sn-p。

#include <iostream>
#include <functional> // for bind()
using namespace std;

int calculate(int x, int y)
{
    return x + y;
}

int main()
{
    int num1 = 5;
    int num2 = 5;
    auto calculate_result = bind(calculate, num1, num2);
    auto calculate_answer = bind(calculate, num1, num2);
    auto calculation = bind(calculate, num1, num2);

    int output = (calculate_result() + calculate_answer() + calculation());
    cout << output;  //Prints 30 on console
    return 0;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-03-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-01
    • 2021-04-26
    • 2020-10-04
    相关资源
    最近更新 更多