提问人:ama coder 提问时间:1/20/2022 最后编辑:ama coder 更新时间:9/13/2022 访问量:237
在 C++ 中创建字符串数组和 void 函数指针的向量 [已关闭]
create vector of array of string and void function pointer in c++ [closed]
问:
如何在 Python 中创建这样的数组或 vetor:
Python 中的这个程序:
a = [["foo",foofunc]["bar",barfunk]]
一个数组(或任何事物)与另一个多类型数组,
答:
1赞
user12002570
1/20/2022
#1
我想你正在寻找如下所示的:vector
pair<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
}
下一个:C++ STD 多维数组内存布局
评论
std::vector
std::vector<std::pair<std::string, void(*)()>>
std::variant
就像一个联合,这意味着一次只能有一个类型处于活动状态。它绝对不是一个“数组”。此外,an 不能用于表示函数或其他可调用对象。int
using myfunc = function<void()>;
map<string, myfunc> a;