我的问题是您在实践中真正使用嵌套类的频率以及在哪些情况下?嵌套类的真正力量是什么,没有它们什么不能做?PS请不要解释它是什么,我知道(from technical point of view
)
问问题
401 次
4 回答
6
我通常使用嵌套类将查找器对象(与 一起使用std::find_if
)嵌入到我的特定类型中。
就像是:
// Dummy example
class Foo
{
public:
class finder
{
public:
finder(int value) : m_value(value) {};
bool operator()(const Foo& foo) { return (foo.m_int_value == value); }
private:
int m_value;
};
private:
int m_int_value;
friend class finder;
};
然后:
vector<Foo> foo_list;
vector<Foo>::iterator foo =
std::find_if(foo_list.begin(), foo_list.end(), Foo::finder(4));
这当然可以在不使用嵌套类的情况下完成。但我觉得它非常优雅,因为 finder 在类定义之外没有用处:
如果我在代码重构的情况下删除了该类,则也应该删除查找器。
于 2010-10-04T12:57:30.273 回答
1
我很少使用它们,原因如下:
- 它们往往是我不喜欢在头文件中包含的实现细节。
- 我不喜欢语法。
有时我使用嵌入式结构(对于 POD,没有方法)。
于 2010-10-04T13:33:00.210 回答
0
当一个类需要包含分组/封装的数据时,它们很有用。您可以将其全部设计到一个private
嵌套类中,以防止外界无意使用该数据类型。
它也可以用作实现友谊的一种可能更清晰的方式。通过嵌套类而不是使用友谊,您可以进一步封装friend
代码部分之间的关系。
于 2010-10-04T13:29:31.583 回答
0
我将它们用作需要访问我的类的实用程序类:信号处理程序、计时器,尤其是在使用 pimpl 时,因此实现已经在 cpp 文件中。
没有嵌套类,C++ 中没有什么是不能完成的,但它是一种很好的方法来限制这些类的范围,这些类大多只是将事件分派给我的类。
于 2010-10-04T13:59:06.307 回答