如何用我的函数填充向量?

Posted

技术标签:

【中文标题】如何用我的函数填充向量?【英文标题】:How can I populate a vector with my functions? 【发布时间】:2020-03-29 04:29:03 【问题描述】:
#include <iostream>
#include<string>
#include<vector>
#include<functional>
using namespace std;
void straightLineMethod();
void unitsOfActivity();
void decliningMethod();

int main()

    using func = std::function<void()>;
    string inputMethod;
    string depreciation[3] =  "straight line","units of activity","declining" ;
    std::vector<func> functions;
    functions.push_back(straightLineMethod);
    functions.push_back(unitsOfActivity);
    functions.push_back(decliningMethod);
    cout << " Enter the method of depreciation you're using: " << depreciation[0] << ", " << depreciation[1] << " , or " << depreciation[2] << endl;
    cin.ignore();
    getline(cin, inputMethod);
    for (int i = 0; i <functions.size() ; i++) 
        while(inputMethod == depreciation[i])
        
            functions[i]();
        

我尝试研究答案并了解如何使用std::function,但我并不完全理解它的作用。在网上很难找到与这个问题相关的答案。本质上,我想要的是将三个函数放在一个向量中,将用户输入与字符串数组进行比较,然后使用数组中的索引来使用向量中的相关索引来调用函数。这对我来说似乎是个好主意,但它失败了。在这种情况下使用.push_back 尝试填充向量给了我一个

E0304 error:  no instance of overloaded function matches the argument list. 

Edit: Specifically, I dont know what the syntax: using func= std::function<void()> is actually doing. I just added it to the code to try to get it to work , thats why my understanding is limited in troubleshooting here.

Edit: the E0304 error is fixed by correcting the syntax to reference the function instead of calling it. And i changed functions[i] to functions[i]() to call the functions, although it is still not working.

【问题讨论】:

您对它们有什么不了解的地方?这将帮助人们根据您的需求定制响应。写解释只是为了发现你已经理解了其中的一部分是没有用的。 ***.com/questions/1112584/stdvector-of-functions 他们在这个帖子上回答了同样的问题,请查看 你知道你的代码永远不会终止吗? @TanveerBadar 为什么会这样? while循环,一旦进入,永远不会终止。 【参考方案1】:

看起来您混淆了函数调用语法,并传递了一个实际(对 a 的引用)函数。在你的functions.push_back(functionNameHere) 中删除内部(),你不想调用那个函数,你想把函数本身推到向量中。另一方面,你的functions[i] 应该是functions[i](),因为这里你实际上是在调用函数。

例如,这绝对有效:

void testMethod() 

    cout << "test method has been called\n";


int main()

    using func = std::function<void()>;
    std::vector<func> functions;
    functions.push_back(testMethod);
    functions[0]();

在这里运行 - http://cpp.sh/2xvnw

【讨论】:

嘿,谢谢你的提示!修复了错误。我也将 for 循环内的语法更改为 functions[i]() ,但不幸的是,它仍然没有调用该函数..虽然它是一个开始。 @FreddyIngle - 我添加了一个绝对适用于参考的最小示例。 太棒了,是的,我看到这肯定是这样的。我如何让它根据用户输入调用 3 个函数中的 1 个。使用嵌套 if 语句会更好吗? 首先,删除 cin.ignore(),您忽略了实际的第一个输入而不是读取它。其次,用if 替换while,你真的不想在一段时间内无限期地运行你的函数。除此之外,它看起来不错,至少第一眼看上去是这样。必要时进行调试。在这里,这几乎是您运行的代码,只是我提到的更改 - onlinegdb.com/rJYwe36UU 请注意,在您的原始帖子编辑中,您没有() 添加到实际的函数调用中。

以上是关于如何用我的函数填充向量?的主要内容,如果未能解决你的问题,请参考以下文章

如何用两列 C++ 从文本文件中填充向量

如何用mysql填充gridview?

如何用 linq to EF 填充我的类对象?

如何用 Pentaho Kettle 填充我的事实表

如何用多次出现的模式填充 varchar

何时以及如何为离散卷积进行零填充?