在 C++ 中创建字符串数组和 void 函数指针的向量 [已关闭]

create vector of array of string and void function pointer in c++ [closed]

提问人:ama coder 提问时间:1/20/2022 最后编辑:ama coder 更新时间:9/13/2022 访问量:237

问:


想改进这个问题吗?通过编辑这篇文章添加详细信息并澄清问题。

去年关闭。

如何在 Python 中创建这样的数组或 vetor:

Python 中的这个程序:

a = [["foo",foofunc]["bar",barfunk]]

一个数组(或任何事物)与另一个多类型数组,

C++ 数组 指针 向量 std

评论

3赞 Damien 1/20/2022
您可以创建一个包含 2 个元素、一个字符串和一个函数的类,然后创建一个这样的对象。对于该函数,您可以使用 std::functionstd::vector
3赞 康桓瑋 1/20/2022
也许你需要的是.std::vector<std::pair<std::string, void(*)()>>
2赞 Some programmer dude 1/20/2022
std::variant就像一个联合,这意味着一次只能有一个类型处于活动状态。它绝对不是一个“数组”。此外,an 不能用于表示函数或其他可调用对象。int
1赞 Eljay 1/21/2022
或者,由于您的用例未指定,并且 .using myfunc = function<void()>;map<string, myfunc> a;
0赞 Yakk - Adam Nevraumont 1/21/2022
提供您要执行的简短 python 代码。它应该既是最小的,又是完整的。你所写的内容并不能很好地描述你的问题。

答:

1赞 user12002570 1/20/2022 #1

我想你正在寻找如下所示的:vectorpair<std::string, void (*)()


#include <iostream>
#include <utility>
#include <string>
#include <vector>
void foofunc()
{
    std::cout<<"foofunc called"<<std::endl;
    //do something here 
}
void barfunc()
{
    std::cout<<"barfunc called"<<std::endl;
    //do something here 
}
int main()
{
    //create a vector of pair of std::string and pointer to function with no parameter and void return type
    std::vector<std::pair<std::string, void (*)()>> a;
    
    //add elements into the vector
    a.push_back({"foo", &foofunc});
    a.push_back({"bar", &barfunc});
    
    //lets try calling the functions inside the vector of pairs
    a[0].second();//calls foofunc()
    
    a[1].second(); //calls barfunc()
    return 0;
}

上述程序的输出可以在这里看到。

评论

1赞 ama coder 1/21/2022
我使用你的代码。编译时,g++ 返回:/usr/bin/ld:test/header_test:_ZSt4cout:版本 3 无效(最大 0) /usr/bin/ld:test/header_test:添加符号时出错:值错误 collect2:错误:ld 返回 1 退出状态。
0赞 user12002570 1/21/2022
请尝试以下命令:在上面的命令中,main.cpp 是源文件的名称。因此,如果源文件的名称与 main.cpp 不同,则在上面的命令中使用该名称而不是 main.cpp。g++ main.cpp -o program
1赞 digito_evo 1/21/2022 #2

您可以利用以下优势:std::function

#include <iostream>
#include <functional>


void foofunc( )
{
    // your code goes here
    std::clog << "Hi" << '\n';
}

int main( )
{
    std::function< void( ) > f_foofunc = foofunc;
    f_foofunc( ); // call it directly

    std::vector< std::pair< std::string, std::function<void( )> > > func_vec;

    func_vec.push_back( { "foo", &foofunc } );
    
    func_vec[0].second( ); // call it from the vector
}