在 C++ 中创建字符串数组向量和 void 函数指针
create vector of array of string and void function pointer in c++
如何在 C++ 中创建字符串数组(2 个索引)和 void 函数指针的向量?
python中的这个程序:
a = [["foo",foofunc]["bar",barfunk]]
注意:这是一个数组,因为 python 是一种动态语言。
我试试这个:
std::vector <std::varient<std::string,int>*>
但这有一个错误。
注意:在此代码中我使用了字符串和整数,但我不知道 void 函数指针的类型。
我认为您正在寻找 pair<std::string, void (*)()
中的 vector
,如下所示:
#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;
}
上面程序的输出可见here.
您可以利用 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++ 中创建字符串数组(2 个索引)和 void 函数指针的向量?
python中的这个程序:
a = [["foo",foofunc]["bar",barfunk]]
注意:这是一个数组,因为 python 是一种动态语言。
我试试这个:
std::vector <std::varient<std::string,int>*>
但这有一个错误。
注意:在此代码中我使用了字符串和整数,但我不知道 void 函数指针的类型。
我认为您正在寻找 pair<std::string, void (*)()
中的 vector
,如下所示:
#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;
}
上面程序的输出可见here.
您可以利用 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
}