我正在尝试将一个函数指针传递给另一个 function ,该函数具有一个字符串数组作为参数。到目前为止,我有以下内容:
void pass_function(string args[]) {
//so something with args.
}
void takes_a_function(void(*function)(string[])) {
function;
}
int main()
{
string s[] = { "hello", "World" };
takes_a_function(pass_function(s));
system("pause");
return 0;
}
问题似乎是参数pass_function(s)
转换为void
而不是void(*function)(sting *)
我想象它需要强制转换,但是如果可能的话,更希望清洁工这样做。
答案 0 :(得分:1)
正确的语法是:
takes_a_function(pass_function);
或者:
void pass_function(std::string args[]);
void takes_a_function(void(*function)(std::string[]), std::string args[]) {
function(args);
}
int main() {
std::string s[] = { "hello", "World" };
takes_a_function(pass_function, s);
}
答案 1 :(得分:1)
如果可能的话,宁愿清洁工这样做。
从这里
takes_a_function(pass_function(s));
^^^^^^^^^^^^^^^^^^
您似乎想在绑定参数(字符串数组之后,将可调用对象(pass_function
)传递给另一个函数(takes_a_function
)。 em>)。如果是这样,您可以在C ++中有更好的选择。
首先使用std::vector<std::string>
或std::array<std::string, 2>
(如果知道大小,则使用 )来存储字符串。其次,通过以下两种方式之一将callable传递给另一个函数:
将takes_a_function
用作模板函数,然后
与参数绑定传递可调用对象(pass_function
作为Lambda函数)。
#include <vector> // std::vector
#include <functional> // std::bind
template<typename Callable>
void takes_a_function(const Callable &function)
{
function(); // direckt call
}
int main()
{
std::vector<std::string> s{ "hello", "World" };
auto pass_function = [](const std::vector<std::string> &args) { /*do something*/ };
takes_a_function(std::bind(pass_function, s));
return 0;
}
使用函数指针
如果函数指针不可避免,则在其中需要两个参数
takes_a_function
,一个应该是函数指针,另一个应该是函数指针
应该是字符串数组。
#include <vector> // std::vector
// convenience type
using fPtrType = void(*)(std::vector<std::string> const&);
void pass_function(const std::vector<std::string> &args) { /*do something*/ };
void takes_a_function(const fPtrType &function, const std::vector<std::string> &args)
{
function(args); // call with args
}
int main()
{
std::vector<std::string> s{ "hello", "World" };
takes_a_function(pass_function, s);
return 0;
}