Template speccialization question

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Alfonso Morra

    Template speccialization question

    I have a function template declared as ff:

    template <class T1, class T2> size_t find( const T1& col, const T2&
    val, const ColFindEnum& dir ) ;


    I wanted to specialize it for string,long as ff:

    template<> //string, long specialization
    size_t find( const std::string& col, long& val, const ColFindEnum& dir )


    However, I get a compiler error:
    error C2912: explicit specialization; 'size_t A::find(const std::string
    &,long &,const Table::ColFindE num &)' is not a specialization of a
    function template

    Is it not possible to have a function template that has both template
    arguments and arguments with "known types"?



  • Rob Williscroft

    #2
    Re: Template speccialization question

    Alfonso Morra wrote in news:dca6s8$i19 $1@nwrdmz02.dmz .ncs.ea.ibs-
    infra.bt.com in comp.lang.c++:
    [color=blue]
    > I have a function template declared as ff:
    >
    > template <class T1, class T2> size_t find( const T1& col, const T2&
    > val, const ColFindEnum& dir ) ;
    >
    >
    > I wanted to specialize it for string,long as ff:
    >
    > template<> //string, long specialization
    > size_t find( const std::string& col, long& val, const ColFindEnum& dir
    > )
    >[/color]

    Try making it ..., long const &val, ...
    ............... ..........^^^^^

    long & can't be used to deduce a valid T2 as its declared T2 const &.
    [color=blue]
    >
    > However, I get a compiler error:
    > error C2912: explicit specialization; 'size_t A::find(const std::string
    > &,long &,const Table::ColFindE num &)' is not a specialization of a
    > function template
    >
    > Is it not possible to have a function template that has both template
    > arguments and arguments with "known types"?[/color]

    Partial specializations are illegal, explicit specializations , like you
    tried above, are legal.

    HTH.

    Rob.
    --

    Comment

    Working...