我想将一些参数传递给一个好奇的重复模板模式。然后我希望这个基类创建其他对象并将这两种类型传递给子类。这将允许我概括基类以在调用子类之前执行一些通用逻辑。每个子类应该能够成为一级层次结构的专用实例。
答案 0 :(得分:0)
以下是如何执行此操作:
struct ParamOne {
double val {0.0};
};
struct ParamTwo {
int val {0};
};
template<typename P, typename Data, typename Other>
class Baseclass
{
public:
using subclass_type = P;
using data_type = Data;
using other_type = Other;
bool Method( const Data &data);
};
template<typename P, typename Data, typename Other> using pdata_type = typename P::data_type;
template<typename P, typename Data, typename Other> using pother_type = typename P::other_type;
template<typename P, typename Data, typename Other>
bool Baseclass<P, Data, Other>::Method( const Data &data )
{
P& Subclass = static_cast<P&>( *this );
pother_type<P, Data, Other> other;
other.val = 11;
return Subclass.SubclassMethod( data, other );
}
template<typename Data, typename Other>
class Subclass : public Baseclass<Subclass<Data, Other>, Data, Other>
{
public:
using data_type = Data;
using other_type = Other;
bool SubclassMethod( const Data &data, Other &other );
};
template<typename Data, typename Other>
bool Subclass<Data, Other>::SubclassMethod( const Data &data, Other &other )
{
return true;
}
template<>
bool Subclass<ParamOne, ParamTwo>::SubclassMethod( const ParamOne &data, ParamTwo &other )
{
return true;
}
int main(int argc, char **argv)
{
ParamOne one;
one.val = 5.0;
Subclass<ParamOne, ParamTwo> test;
test.Method(one);
return 0;
}