我想定义一个模板类,它接受一个全局指针作为模板参数,就像一个 null-element。当指向空元素的指针的类型相同时,下面的代码工作: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;
}
1条答案
按热度按时间wlwcrazw1#
如何做以下几点:
注意非类型模板参数的不可转换性,但仍使其与任何基址指针兼容。