我正在使用带有一组类的继承。子类之一带有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
[std::tuple<>
是std::tuple
的有效专长,所以我不希望您在第一个示例中遇到任何问题。