我的问题是你真的在你的练习中使用嵌套类多久?嵌套类的真正威力是什么?没有它们,什么是不可能完成的? P.S.请不要解释它是什么,我知道它(from technical point of view
)在C++中的嵌套类
2
A
回答
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));
这当然可以在不使用嵌套类来完成。但我觉得它很优雅,因为取景器在类定义之外没有用处:
如果我在代码重构的情况下删除了类,查找器也应该被删除。
0
当一个类需要包含分组/封装数据时,它们非常有用。你可以将它全部设计成嵌套类,以防止外界不小心使用数据类型。
它也可以作为一种可能更清晰的方式来实现友谊。通过嵌套类而不是使用友谊,您可以进一步封装代码部分之间的关系。
1
我使用它们很少,原因如下:
- 他们往往是实现 细节,我不喜欢在 头文件。
- 我不喜欢 语法。
有时我使用嵌入式结构(对于POD,没有方法)。
0
我将它们用作需要访问我的类的实用程序类:信号处理程序,定时器,特别是在使用pimpl时,因此实现已经存在于cpp文件中。
C++中没有任何东西不能在没有嵌套类的情况下完成,但它是限制这些类的一种很好的方法,这些类通常只是派发事件给我的类。
相关问题
- 1. 嵌套类在C++
- 2. Scala中的C++嵌套类
- 3. 嵌套类C#
- 4. C#嵌套类
- 5. C++嵌套类
- 6. 嵌套类C++
- 7. 在构造嵌套类(C++)
- 8. 用C嵌套类型/类++
- 9. C++:嵌套类模板类
- 10. 在C#中引用嵌套类对象
- 11. 异常而decalaring在C#中嵌套类
- 12. 在c#中序列化嵌套类?
- 13. 如何在C++中使用嵌套类?
- 14. Ruby:类中的嵌套类与嵌套类中的嵌套相同?
- 15. C++中的嵌套/递归类
- 16. C++中的嵌套类不工作
- 17. C#中的.NET XmlSerializer和嵌套类#
- 18. 嵌套类中的友谊C++
- 19. c#和类中的嵌套枚举
- 20. C#反射PropertyInfo MVC中的嵌套类
- 21. 嵌套()在c + +
- 22. 在嵌套类
- 23. C#嵌套类和继承
- 24. 嵌套类崩溃C++
- 25. C++嵌套类实例
- 26. C++嵌套类方法
- 27. C++:私人嵌套类型
- 28. C++类和嵌套成员
- 29. C#嵌套私有类
- 30. c#序列化嵌套类
@Yogesh:'Foo :: finder'也是一个函数对象。对于更复杂的测试,这可以比'boost :: bind'或类似的更具可读性。 – 2010-10-04 13:15:08
@Yogesh Arora:这当然是一个简化的例子,我自己使用'boost :: find'和'std :: mem_fun'很多。但是对于一些复杂的情况,我相信使用查找器对象会使我的代码更易于阅读和维护。我理解你的观点,但我的答案是否真的值得投票?这不是我所说的根本错误。 – ereOn 2010-10-04 13:35:07
我没有看到为什么这些必须是嵌套类的原因,这些可能也只是可以在cpp文件中声明的小类,隐藏在客户端在头文件中看到的内容中。 – 2010-10-04 13:44:21