【问题标题】:c++ templated class with functionpointer to variadic function带有指向可变参数函数的函数指针的 c++ 模板类
【发布时间】:2019-10-21 22:17:52
【问题描述】:

我想在 C++ 中实现一个 spooler/worker 类,它具有将新任务推送到类中以让它们由后台线程执行的功能。任务被附加到队列中,如果工作人员没有运行,它就会启动。

为了更好地重用,我想为可变参数任务使用可变参数模板参数,但我在制定模板标题时遇到了麻烦。

template <void (*TFunction)(typename ... TParams)> //a parameter pack is not allowed here
class worker
{
public:
    push(TParams... args);
};
template <typename ... TParams, void (*TFunction)(TParams...)> //template parameter pack not at end of parameter list
class worker
{
public:
    push(TParams... args);
};

我有两个可行的想法,但我都不喜欢。

template <typename ... TParams>
class worker
{
public:
    worker(void(*function)(TParams...)): function_(function) { }
    push(TParams... args);

private:
    const void (*function_)(TParams...);
};

template <typename ... TParams>
struct variadic
{
    template <void*(TFunction)(TParams...)>
    class worker {
    public:
        push(TParams... args);
    };
};

有没有办法接受带有单个模板头的可变参数的函数?

谢谢大家

【问题讨论】:

    标签: c++ templates variadic-templates variadic-functions


    【解决方案1】:

    专业化:

    template <auto value>
    class worker;
    
    template <typename ... TParams, void (*F)(TParams...)>
    class worker<F>
    {
    public:
        void push(TParams... args);
    };
    

    Demo

    【讨论】:

    • 感谢演示,我在让它工作时遇到了一些问题,但现在一切都很好。第一个完全符合我的要求。
    猜你喜欢
    • 2013-04-30
    • 2014-02-03
    • 2014-04-14
    • 2019-10-20
    • 1970-01-01
    • 2015-01-20
    • 2016-10-18
    • 2017-02-24
    • 1970-01-01
    相关资源
    最近更新 更多