Runnable 函数的 C++ 模板
C++ template for Runnable function
我正在为我的应用程序使用 C++ 编写一个线程管理库,作为其中的一部分,我正在尝试编写一个模板 class,它需要 FunctionPointer
在 运行函数。我是一名 Java 开发人员,并尝试如下可视化:
class MyRunnable : public Runnable {
public:
MyRunnable(fp)
{
mFp = fp;
}
private:
FunctionPointer mFp;
// Will be called by the thread pool using a thread
void run()
{
mFp();
}
}
class ThreadManager {
public:
void execute(MyRunnable runnable) {
executeOnAThreadPool(runnable);
}
}
由于我不精通 C++ 语法,我发现很难将构造函数定义为采用 FunctionPointer
作为参数,FunctionPointer
的参数数量可变。类似于:
MyRunnable(Fp fp, Args... args)
谁能帮我定义上面 MyRunnable
class 的构造函数。
谢谢。
不确定...但在我看来,您看起来像
class MyRunnable
{
private:
std::function<void()> mF;
public:
template <typename F, typename ... Args>
MyRunnable (F && f, Args && ... args)
: mF{ [&f, &args...](){ std::forward<F>(f)(std::forward<Args>(args)...); } }
{ }
void run ()
{ mF(); }
};
下面是一个完整的编译示例
#include <iostream>
#include <functional>
class MyRunnable
{
private:
std::function<void()> mF;
public:
template <typename F, typename ... Args>
MyRunnable (F && f, Args && ... args)
: mF{ [&f, &args...](){ std::forward<F>(f)(std::forward<Args>(args)...); } }
{ }
void run ()
{ mF(); }
};
void foo (int a, long b, std::string const & c)
{ std::cout << "executing foo() with " << a << ", " << b << ", " << c << '\n'; }
int main ()
{
MyRunnable mr{foo, 1, 2l, "three"};
std::cout << "before run" << '\n';
mr.run();
}
打印
before run
executing foo() with 1, 2, three
我正在为我的应用程序使用 C++ 编写一个线程管理库,作为其中的一部分,我正在尝试编写一个模板 class,它需要 FunctionPointer
在 运行函数。我是一名 Java 开发人员,并尝试如下可视化:
class MyRunnable : public Runnable {
public:
MyRunnable(fp)
{
mFp = fp;
}
private:
FunctionPointer mFp;
// Will be called by the thread pool using a thread
void run()
{
mFp();
}
}
class ThreadManager {
public:
void execute(MyRunnable runnable) {
executeOnAThreadPool(runnable);
}
}
由于我不精通 C++ 语法,我发现很难将构造函数定义为采用 FunctionPointer
作为参数,FunctionPointer
的参数数量可变。类似于:
MyRunnable(Fp fp, Args... args)
谁能帮我定义上面 MyRunnable
class 的构造函数。
谢谢。
不确定...但在我看来,您看起来像
class MyRunnable
{
private:
std::function<void()> mF;
public:
template <typename F, typename ... Args>
MyRunnable (F && f, Args && ... args)
: mF{ [&f, &args...](){ std::forward<F>(f)(std::forward<Args>(args)...); } }
{ }
void run ()
{ mF(); }
};
下面是一个完整的编译示例
#include <iostream>
#include <functional>
class MyRunnable
{
private:
std::function<void()> mF;
public:
template <typename F, typename ... Args>
MyRunnable (F && f, Args && ... args)
: mF{ [&f, &args...](){ std::forward<F>(f)(std::forward<Args>(args)...); } }
{ }
void run ()
{ mF(); }
};
void foo (int a, long b, std::string const & c)
{ std::cout << "executing foo() with " << a << ", " << b << ", " << c << '\n'; }
int main ()
{
MyRunnable mr{foo, 1, 2l, "three"};
std::cout << "before run" << '\n';
mr.run();
}
打印
before run
executing foo() with 1, 2, three