我正在使用模板来存储成员函数指针。但我现在有一个继承问题。我不知道这是否是编译器错误,但是当我做
时&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并不是我想要的。
答案 0 :(得分:2)
我担心你无能为力。允许标准库的实现者按照
从基类继承方法17.6.5.11派生类[派生]
1 - 实现可以从具有为实现保留的名称的类派生C ++标准库中的任何类。
它不会以任何方式说明是否允许从基类继承方法(和其他成员),但显然不会禁止它。
即使签名可能不是您所期望的:
17.6.5.5成员函数[member.functions]
2 - 实现可以在类中声明其他非虚拟成员函数签名:
- 通过向成员函数签名 186 添加带默认值的参数; [...]
186)因此,C ++标准库中类的成员函数的地址具有未指定的类型。
抱歉:)