【发布时间】:2013-02-12 13:50:34
【问题描述】:
这个问题已经被问过here——实际上不止两次——但我自己无法从帖子中找到解决我的问题的方法。
我有一个库,其中有一个名为A 的类。从A 类我需要访问std::map<>,但它是私有的。此外,根据我在我提到的帖子中发现的可能性,A 类具有 no 模板函数。
我实际上能够重新编译库,这样我就可以简单地更改可见性。 但是,这将是大量的工作——我不确定更改可见性是否不会导致其他任何崩溃。
我想做的是,在课堂上B:
// NOT MY CODE -- library <a.h>
class A {
private:
std::map<int, int> A_map;
};
// MY CODE -- module "b.h"
# include <a.h>
class B : private A {
public:
B() {
for (auto it(A_map.begin()); it != A_map.end(); ++it) {
...;
}
}
};
如何在不更改原始类的情况下做到这一点 - 并且在基类中没有任何可用的模板化方法可以重载/专门化?
【问题讨论】:
-
什么是
template <typename X, typename Y> std::map<X, Y> map;? -
@us2012 我使用
class B : private A没有问题,但它仍然不允许我从A访问map。 -
我的博客展示了一种方法。请不要使用我的答案中链接的实现。如果它适合你,最好使用bloglitb.blogspot.de/2011/12/…
-
@DrewDormann:我相信他的意思是,它可能只是一种方法
-
如果你想知道我博客上“更安全”的第二篇文章是如何工作的,我推荐一个新的 SO 问题。我很确定有很多人很乐意在 SO 上解释它。
标签: c++ class templates inheritance private