成员函数指针和继承

时间:2014-05-04 22:28:29

标签: c++ templates inheritance member-function-pointers

我正在使用模板来存储成员函数指针。但我现在有一个继承问题。我不知道这是否是编译器错误,但是当我做

&std::map<T1, T2>::size

我得到一个这个调用到std :: _ Tree而不是std :: map。如果我做

&std::map<T1, T2>::swap

我得到一个这个叫做std :: map的电话。 (在visual studio 2013上测试)

现在看一下std :: map的代码,它继承自std :: _ Tree,它定义了size但不是swap。我现在的问题是,如果有一种方法可以在所有情况下将类型显示为__thiscall std :: map :: *。导致它成为std :: _ Tree并不是我想要的。

1 个答案:

答案 0 :(得分:2)

我担心你无能为力。允许标准库的实现者按照

从基类继承方法
  

17.6.5.11派生类[派生]

     

1 - 实现可以从具有为实现保留的名称的类派生C ++标准库中的任何类。

它不会以任何方式说明是否允许从基类继承方法(和其他成员),但显然不会禁止它。

即使签名可能不是您所期望的:

  

17.6.5.5成员函数[member.functions]

     

2 - 实现可以在类中声明其他非虚拟成员函数签名:

     
      
  • 通过向成员函数签名 186 添加带默认值的参数; [...]
  •   
     

186)因此,C ++标准库中类的成员函数的地址具有未指定的类型。

抱歉:)

相关问题