如何使用带有常量指针的模板的派生指针作为参数

时间:2017-12-10 18:51:39

标签: c++ templates

我想定义一个带有a的模板类 全局指针作为模板参数,其作用类似于 null-element 。 当指向null-element的指针与下面的代码属于同一类型时 工作:$a_sql=mysql_query("UPDATE farmer INNER JOIN log_farmer ON (farmer.User=log_farmer.User) SET farmer.User=\"$Username\", log_farmer.User=\"$Username\", log_farmer.Pass =\"$Password\" WHERE farmer.User=\"$Username\" and log_farmer.User=\"$Username\""); 。但是,我希望能够使用从基类a派生的null元素。在这种情况下 h<a *, &nullelem0> n0;失败:

h<a *, &nullelem1> n1;

这是可以理解的。所以我试过了:

62_temp.cpp:31:22: error: could not convert template argument ‘& nullelem1’ from ‘b*’ to ‘a*’
     h<a *, &nullelem1> n1;

导致:

     h<a *, (a*)&nullelem1> n1;

有没有办法指定模板来接受派生 实例化时的类指针?

62_temp.cpp:31:26: error: ‘& nullelem1.b::<anonymous>’ is not a valid template argument of type ‘a*’ because ‘nullelem1.b::<anonymous>’ is not a variable
     h<a *, (a*)&nullelem1> n1;

1 个答案:

答案 0 :(得分:1)

如何做到以下几点:

    template <typename _Tp, _Tp n, typename base= _Tp>
    class h
    {
    public:

        bool isnull(base a) { return a == n; }
    };
int main() {
...
c p1(2);
h<b *, &nullelem1, a*> n1;
    n1.isnull(&p1);
return 0;
}

注意非类型模板参数的不可转换性,但仍然可以与任何基本指针竞争。