gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 05:06:50 26 4
gpt4 key购买 nike

我想定义一个模板类作为模板参数的全局指针,其作用类似于空元素。当指向空元素的指针属于同一类型时,下面的代码工作:h<a *, &nullelem0> n0; .但是,我希望能够使用从基类 a 派生的空元素。在这种情况下 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;

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

class a {
public:
a(int v) : v(v) {};
int v;
};
class b : public a {
public:
b(int v) : a(v) {};
};
class c : public a {
public:
c(int v) : a(v) {};
};
a nullelem0(1);
b nullelem1(1);

template <typename _Tp, _Tp n>
class h
{
public:
bool isnull(_Tp a) { return a == n; }
};

int main(int argc, char **argv) {

h<a *, &nullelem0> n0;
c p1(2);
n0.isnull(&nullelem0);
n0.isnull(&p1);

/* this one fails: */
h<a *, &nullelem1> n1;

return 0;
}

最佳答案

如何执行以下操作:

    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;
}

处理非类型模板参数的不可转换性,但仍使其可与任何基指针相比较。

关于c++ - 如何使用带有常量指针作为参数的模板的派生指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47742288/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com