类静态方法我有一个基类Vehicle
和欲填充的Runnable
亚类(Motorcycle
,Car
,Airplane
),使得我可以通过在地图上进行迭代,并调用静态方法Motorcycle::run()
,Car::run()
一个std::unordered_map
,Airplane::run()
。如何填充std::unordered_map
?C++存储在unordered_map
1
A
回答
1
有两种方法。
难的方法:
静态函数不是虚拟的,你必须存储的Mororcyle
,Car
和Airplane
boost::variant
。
typedef boost::variant< Motorcycle, Car, Airplane > VRunnable; // variant
unordered_map<key_t, VRunnable> m;
当你遍历你unorderd_map
,你便可以识别物体的类型,并调用正确类型的静态成员。您可以通过使用访问者类来完成此操作,该类定义了变体中操作超载的操作类型。
它可以工作,但考虑到你想要做什么,它更加繁琐。实际上,在这里你并没有采用Runnable
继承和多态。
聪明的办法:
更简单的方法是将有一个虚拟成员的Runnable :: V运行()调用每一个Runnable的子类的approporiate静态的run()。然后,您可以简单地遍历您的无序映射,然后调用虚函数:然后该对象将调用正确的静态成员。
unordered_map<key_t, Runnable> m;
for (auto x: m)
f.second.vrun();
0
在C++中,不能多态地调用静态方法。但是,您可以调用常规方法并调用静态方法它。
struct Runnable
{
virtual void run_me() = 0;
};
class Car : public Runnable
{
public:
virtual void run_me() { run(); }
static void run();
};
相关问题
- 1. 存储元素VS它们存储在一个unordered_map
- 2. :在unordered_map(C++)
- 3. unordered_map C++
- 4. C++ unordered_map其中键也unordered_map
- 5. C++ unordered_map问题
- 6. unordered_map对值C++
- 7. C++ std :: unordered_map
- 8. 在C++中同步unordered_map
- 9. C++ compare unordered_map hash keys
- 10. 创建2D unordered_map C++
- 11. 存储在用C
- 12. C++ boost unordered_map - 确定密钥是否存在于容器中
- 13. C++ unordered_map插入到向量
- 14. C++中的unordered_map错误?
- 15. C++,如何通过unordered_map
- 16. std :: tr1 :: unordered_map的C++相等
- 17. unordered_map插入错误C++
- 18. std :: unordered_map中可能存在的错误
- 19. 在C++中将csv读入unordered_map
- 20. 在C++中预分配桶unordered_map
- 21. 存储值,C#
- 22. C++:在链表存储串
- 23. 存储器限制在C++
- 24. 在c中存储引用#
- 25. 存储整数值在C
- 26. 在类中存储内存内容 - C++
- 27. C内存池存储
- 28. C#存储过程
- 29. C++浮动存储
- 30. C#存储信息
你在做这个而不是使用多态性的原因是什么?可能有一个更容易/更好的方式来做你想做的事情。 – Velox 2014-09-29 20:52:44
是的,指定你想要做什么可能确实有助于找到更好的解决方案。 – Svalorzen 2014-09-29 20:54:08
从给出的信息几乎可以保证有一个设计问题,一方面你有一个类的实例,另一方面你有静态函数,你希望能够调用,从而放弃对象关系。 – Ylisar 2014-09-29 20:55:54