【发布时间】:2018-10-08 07:32:52
【问题描述】:
我想编写一个函数(如果可能的话,甚至是一个运算符),它正在做类似于 Delphi 的“is”的事情。 德尔福示例:
if Sender is TMenuItem then
TMenuItem(Sender)->Enabled = false;
因此,在 C++ Builder 中,这将类似于:
bool Is(*p1, *p2)
{
p = dynamic_cast<p1*>(p2); //here we typecast TObject to TMenuItem
if (!!p)
{
return true;
}
else return false;
}
如何让函数接受 p1、p2 的任何类型的对象?
【问题讨论】:
-
您只是想知道
A是否是B的基类吗?如果是这样,请考虑std::is_base_of。如果您只想接受任意类型,请查找templates -
在 C++ 中,“正确”的方法是不测试类,而是使用虚拟成员函数。
-
我不明白为什么这个问题被否决:它的表述很好并且很有意义。仅仅因为 OP 想要的不是在 C++ 中进行的最佳方式,这并不意味着问题本身就是不好的。
-
@AGNGazer - 如果不赞成投票的人会因不张贴(评论或回答)的反对票而获得更高的“罚款”并且反对票不是匿名的,那么 SO 上的许多问题都将得到解决。跨度>
-
不是反对者,但这个问题似乎很容易引发讨论(即我们是否应该尝试做这样的事情)。通常,如果我标记一个问题,我认为没有必要进一步解释它 - 如果我的标记有帮助,接近的理由就足够了,如果我的标记不正确,任何评论都将无效。
标签: c++builder