代码之家  ›  专栏  ›  技术社区  ›  AdamC

具有struct和bool的模板专门化

  •  1
  • AdamC  · 技术社区  · 15 年前

    我有一个模板类,我在其中专门化了几个方法。出于某种原因,当我为结构添加专门化时,它似乎与bool的专门化冲突。我得到一个类型转换错误,因为它试图设置struct=bool(解析为错误的专门化)。这是一些密码

    h:

    typedef struct foo {
      ...
    }
    
    template <class T> class bar {
       template <class T> void method1() {...}
       template <> void method1<bool>() {...}
       template <> void method1<foo>() {...}
    }
    

    CPP

     template class bar<bool>;
     template class bar<foo>;
    

    我把错误记进去了 method1<bool> 因为它设置t=foo而不是将其解析为 method1<foo> .

    有什么想法吗?

    2 回复  |  直到 15 年前
        1
  •  1
  •   Benoît photo_tom    15 年前

    (编辑)

    您可以尝试以下方法,将方法实现委托给模板化帮助器类。

    h:

    typedef struct Foo {
      ...
    }
    
    template<class T_Bar, class T2> struct BarMethod1;
    template <class T> class Bar 
    {
       template<class T2> void method1(...)
       {
          BarMethod1<Bar, T2>(...)(...);
       }
    }
    template <class T_Bar, class T2> class BarMethod1 
       {void operator()(...){...}};
    template <class T_Bar> class BarMethod1<T_Bar, bool>
       {void operator()(...){...}};
    
    template <class T_Bar> BarMethod1<T_Bar, Foo>
       {void operator()(...){...}};
    

    CPP

     template class Bar<bool>;
     template class BarMethod1<Bar<bool>, bool>;
     template class BarMethod1<Bar<bool>, Foo>;
     template class Bar<Foo>;
     template class BarMethod1<Bar<Foo>, bool>;
     template class BarMethod1<Bar<Foo>, Foo>;
    
        2
  •  3
  •   AnT stands with Russia    15 年前

    代码的第一部分已经不正确。C++不支持“嵌套”(成员)模板的显式特化,而不显式封闭模板的专门化。

    在代码上下文中,显式专用化模板方法是非法的 method1 不显式专门化整个类模板 bar .

    如果您的成员模板功能 member1 依赖于某些参数,您可以使用重载而不是模板专门化作为解决方法。但是,由于没有,你必须以某种方式重新设计你的模板。上面所做的,在C++中又是非法的。

    您进一步了解的错误很容易(而且很可能是)由那个原始问题引起的。

    P.S.对您发布的问题的描述意味着您的代码可以编译。您发布的内容不应出于上述原因进行编译。这表明您正在发布假代码。邮政实数编码。