如何用boost包装多个派生模板类

问题描述

我需要用boost包装一些从另一个派生的模板类。 首先,我有一个模板类ValueAndUnit,其部分代码为:

template <class T>
class ValueAndUnit
{
public:
    /** \brief Give access to template parameter representing unit */
    typedef T unit_type;
    ValueAndUnit<T>& setValue( double value,T unit );
}

感谢这篇文章 Wrap C++ template class with boost python我能够包装它。这是代码,它可以正常工作。

template<typename T>
class ValueAndUnitWrap : public ValueAndUnit<T>,public wrapper<ValueAndUnit<T> > {
public:
    ValueAndUnit<T>& setValue( double value,T unit ){ return this->get_override( "setValue" )( ); }
};

template<typename T>
void export_ValueAndUnit()
{
    class_<ValueAndUnitWrap<T>,boost::noncopyable>( "ValueAndUnit",no_init )
        .def( "setValue",&ValueAndUnit<T>::setValue,return_internal_reference<>() )
        ;
}
BOOST_PYTHON_MODULE( exemple ){
    enum_<WeightUnit>( "WeightUnit" )
        .value( "WeightUnit_kg",WeightUnit::WeightUnit_kg )
        .value( " WeightUnit_pound",WeightUnit::WeightUnit_pound )
        ;

    export_ValueAndUnit <WeightUnit>();
    class_<WeightInfo,bases<ValueAndUnit<WeightUnit>> >( "WeightInfo",init<double,WeightUnit >() )
        ;
};

现在我有了这个ImmutableValueUnitAndTime类,它是从先前的模板类ValueAndUnit派生而来的(这里仅提供部分代码)。

template <class T>
class ImmutableValueUnitAndTime : public ValueAndUnit<T>
{
    typedef ValueAndUnit<T> baseClass;

public:
ImmutableValueUnitAndTime(const TimeUnit& when,double value,T unit);
}

其中使用的TimeUnit还有另一个类(代码的一部分):

class TimeUnit
{
    friend std::ostream& operator<<(std::ostream &os,const TimeUnit& var);  
public:
    TimeUnit();
static TimeUnit fromMinutes( int in_total_minutes,const TimeUnit* pReference = NULL );
}

一个派生的类是ValueUnitTimeAndDuration,它是从上一个派生的(也是部分代码):

    template <class T>
    class ValueUnitTimeAndDuration : public ImmutableValueUnitAndTime<T>
    {
        typedef ImmutableValueUnitAndTime<T> baseClass;

    public:
            /** \brief Default empty constructor */
        ValueUnitTimeAndDuration();

        ValueUnitTimeAndDuration(const ValueUnitTimeAndDuration<T>& copyFrom) = default;
}

我需要包装的最后一个是TimeBasedInfo(也是部分代码):

enum class TimeBasedUnit
{
    TimeBasedUnit_mU_min,TimeBasedUnit_U_min,TimeBasedUnit_U_hour
};


class TimeBasedInfo : public ValueUnitTimeAndDuration<TimeBasedUnit>
{
    typedef ValueUnitTimeAndDuration<TimeBasedUnit> baseClass;
public:
    /** \brief Default empty constructor */
    TimeBasedInfo();
   static TimeBasedUnit& userPreferenceUnit();
}

我没有在boost文档中找到任何信息来帮助我了解如何包装继承的模板类isTimeBasedInfo,并且我无法弄清楚如何将已经针对一个模板类所做的事情适应于此多继承类。有人知道吗?非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)