У меня есть статическая функция Bar::Function(std::string s1, std::string s2, std::string s3)
, которую я хочу передать в качестве функции для указателя на конструктор класса Foo
, который имеет член boost::function
.Как передать указатель функции, когда аргументы еще не известны
Но три строки создаются в классе Foo()
и еще не известны, когда функция передается как функция для указателя на конструктор Foo. Должен ли я просто передать три пустые строки, поскольку я делаю это в main()
?
class Foo(boost::function<int(std::string, std::string, std::string)> fFunction)
{
public:
Foo()
{
fnCallback = fFunction;
}
int Call()
{
return fnCallback("first", "second", "third")
}
protected:
boost::function<int(std::string, std::string, std::string)> fnCallback;
};
int main(int /*nArgc*/, char */*paszArgv*/[])
{
boost::function<int(std::string, std::string, std::string)> fn = boost::bind(Bar::Function, "", "", "");
Foo oFoo(fn);
oFoo.Call();
return 0;
}
class Bar
{
public:
static int Function(std::string s1, std::string s2, std::string s3)
{
std::cout << s1 << s2 << s3 << std::endl;
}
};
EDIT: Так выглядит код. Указатель функции содержит только адрес функции. Аргументы передаются при его вызове!
fn = &Bar::Function;
Когда вы передаете указатель на функцию, он не принимает аргументов. – YSC
Взгляните на заполнители http://stackoverflow.com/questions/18680607/role-of-placeholder-in-boostbind-in-the-following-example – dkg
Я разместил образец кода. Кстати, есть много ошибок грамматики ... – yasuharu519