我想定义一个带有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;
答案 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;
}
注意非类型模板参数的不可转换性,但仍然可以与任何基本指针竞争。