带有参数包的专业模板类

问题描述 投票:0回答:1

我正在使用带有一组类的继承。子类之一带有std::function(ReturnTy<ParamTypes...>)以及ParamTypes自变量。类签名和构造函数如下所示:

template<class ReturnTy, class... ParamTypes>
class Child : public Interface
{
public:
    Child(ReturnTy default_value, ParamTypes... args)
        : func_set_(false)
        , m_Args(std::make_tuple(std::forward<ParamTypes>(args)...))
        , m_ReturnValue(default_value)
    {}

private:
    bool func_set_;
    std::function<ReturnTy(ParamTypes...)> m_Funciton;
    std::tuple<ParamTypes...> m_Args;
    ReturnTy m_ReturnValue;
};

我的问题是,当我想专门研究没有参数的情况时。此外,我还想专门研究ReturnTy=void并且有参数的情况。我找到了一个与我正在寻找的here接近的答案,但它并未完全涵盖我要执行的操作,因为该问题使用编译时整数作为模板参数,而我使用的是类型。它还涉及函数而不是类。我觉得我已经接近了,但是我需要一些帮助才能使代码正常工作。

作为参考,这是我对其他专业的要求(简称):

template<class ReturnTy>
class Child<ReturnTy> : public Interface
{
public:
    Child(ReturnTy default_value)
        : // The same as first class without m_Args
    {}

private:
    // Same as first class without m_Args
};

template<class... ParamTypes>
class Child<void, ParamTypes...> : public Interface
{
public:
    Child(ParamTypes... args)
        : // Same as first class without m_ReturnValue

private:
    // Same as first class without m_ReturnValue
};

编辑

具体来说,该问题来自以下代码行:
Child<void> obj1(5);

我正在使用带有一组类的继承。子类之一采用std :: function(ReturnTy )以及ParamTypes参数。类签名和构造函数...

c++ class templates variadic-templates template-specialization
1个回答
0
投票

[std::tuple<>std::tuple的有效专长,所以我不希望您在第一个示例中遇到任何问题。

© www.soinside.com 2019 - 2024. All rights reserved.