C++中的根基类

Lit*_*ith 10 c++ inheritance

.NET中的每个对象都从公共根"Object"继承(直接或间接).在C++中是否有这样一个共同的对象根?如何将任何对象传递给函数?

public void DoSomeStuff(object o) { ... }
Run Code Online (Sandbox Code Playgroud)

编辑:澄清,目的:在该函数中,我想调用指向成员函数的指针.为此,我需要对象实例和指向所需函数的指针.为了简化可读性,我想制作一个包含所需信息的包装器.我不确定这是不是最好的方式,但这是背景的想法.

Ter*_*fey 12

没有共同的基类; 但是使用类似boost :: any或更多通常基于模板的方法比void*更受欢迎.


Cor*_*win 6

没有共同的根类.使用void*将任何对象传递给函数,或者更好地定义一些基类.

  • 这是正确的,所以我不会投票,但推荐`void*'几乎不是一个好建议. (10认同)
  • 我说可以推荐void*,目的是得到一个等价的Object.目的比解决方案更有缺陷. (5认同)

Did*_*set 5

模板函数存在并且避免需要所有类的这种根父级。

template <class T>
void DoSomeStuff(T const &t) {
    // Do the stuff with t...
    t.callTheFunction();
}
Run Code Online (Sandbox Code Playgroud)

如果您的所有对象都有一个成员函数 callTheFunction(),那么您将获得与具有根基类完全相同的行为,但具有相同的要求(您的所有类都有一个具有该名称的函数)。

此外,您还DoSomeStuff()可以获得额外的好处,即能够为一些不属于您的类专门化模板函数,并且无法继承您的虚拟成员函数。