C++ 如何使用非默认构造函数实例化模板化类 请考虑以下例子: class Generator { public: Generator(int n) : m_n(n) { } int f() { return m_n; } private: int m_n; }; template<class BaseClass> class Transformer : public BaseClass { public: Transformer(int mult, int add) : m_mult(mult) , m_add(add) { } int f() { return BaseClass::f() * m_mult + m_add; } private: int m_add; int m_mult; };
接下来,我尝试了模板专门化:C++ 如何使用非默认构造函数实例化模板化类 请考虑以下例子: class Generator { public: Generator(int n) : m_n(n) { } int f() { return m_n; } private: int m_n; }; template<class BaseClass> class Transformer : public BaseClass { public: Transformer(int mult, int add) : m_mult(mult) , m_add(add) { } int f() { return BaseClass::f() * m_mult + m_add; } private: int m_add; int m_mult; };,c++,c++11,templates,constructor,variadic-templates,C++,C++11,Templates,Constructor,Variadic Templates,接下来,我尝试了模板专门化: template<> Transformer<Generator>::Transformer(int n, int mult, int add) // error C2244: 'Transformer<Generator>::Transformer': unable to match function definition to an existing declaration : Transformer(mult,
template<> Transformer<Generator>::Transformer(int n, int mult, int add) // error C2244: 'Transformer<Generator>::Transformer': unable to match function definition to an existing declaration
: Transformer(mult,add)
, Generator(n)
{};
Transformer<Generator> t(n,mult,add);
template Transformer::Transformer(int n,int mult,int add)//错误C2244:“Transformer::Transformer”:无法将函数定义与现有声明匹配
:变压器(多个,添加)
,发电机(n)
{};
变压器t(n、mult、add);
如何实例化具有非默认构造函数的模板
有更多的生成器类,它们的构造函数中有不同的参数。现在我想实例化一个类,该类由传递所有必需参数的
在我看来,如果您至少可以使用C++11,那么您需要的是一个可变模板构造函数,其编写如下
template <typename ... As>
Transformer (int mult, int add, As && ... as)
: BaseClass{std::forward<As>(as)...}, m_mult{mult}, m_add{add}
{ }
对不起,那可能是误会了。我已重新措辞了这个问题。但是,如果有更多的生成器类在其构造函数中具有不同的参数,您会怎么做?@MiB_Coder-我明白了。。。是的,这是一个完全不同的问题;给我几分钟,我重写我的答案,提出一个建议solution@MiB_Coder-修改答案。疑问:你只标注C++;C++11解决方案适合您吗?
template <typename ... As>
Transformer (int mult, int add, As && ... as)
: BaseClass{std::forward<As>(as)...}, m_mult{mult}, m_add{add}
{ }
template <typename ... As>
TG (int mult, int add, As && ... as)
: Transformer{mult, add, std::forward<As>(as)...}
{ }