玩弄了这个,我怀疑它不可能,但我想我会问专家.我有以下C++代码:
class IInterface { virtual void SomeMethod() = 0; }; class Object { IInterface* GetInterface() { ... } }; class Container { private: struct Item { Object* pObject; [... other members ...] }; std::list<Item> m_items; };
我想将这些方法添加到Container:
MagicIterator<IInterface*> Begin(); MagicIterator<IInterface*> End();
为了让呼叫者可以写:
Container c = [...] for (MagicIterator<IInterface*> i = c.Begin(); i != c.End(); i++) { IInterface* pItf = *i; [...] }
所以基本上我想提供一个类似乎迭代某些集合(其中Begin()和End()的调用者不允许看到)的IInterface指针,但它实际上迭代了指向其他指针的指针集合.对象(Container类专用),可以转换为IInterface指针.
几个关键点:
MagicIterator
是在外面定义的Container
.
Container::Item
必须保持私密.
MagicIterator
有遍历IInterface
,指针尽管事实Container
持有std::list<Container::Item>
.Container::Item
包含一个 …我正在尝试按如下方式安排WPF UI:
解决方案将非常受欢迎; 我已经摆弄了一段时间并且设法让事情工作除了 ListView下面的控件,通过在窗口中使用外部DockPanel,第一个控件停靠在顶部,ListView填充剩余空间但设置为VerticalAlignment ="最佳".
一个纯粹的XAML解决方案是理想的,但如果它不可避免,我不介意代码背后.一个解决方案的奖励点,允许多个这样的安排垂直堆叠:)感谢您的帮助!
在之前的游戏项目中,我有一些方便的服务定位器反模式.我想用依赖注入替换它.autofac看起来像我最容易的DI容器,因为它似乎有相关的功能 - 但我无法弄清楚如何实现我正在寻找的东西.
我有一个服务定位器而不是单个服务定位器,它可以委托给它的父节点(实际上提供"范围"服务):
class ServiceLocator {
ServiceLocator _parent;
Dictionary<Type, object> _registered = new Dictionary<Type, object>();
public ServiceLocator(ServiceLocator parent = null) {
_parent = parent;
}
public void Register<T>(T service) {
_registered.Add(typeof(T), service);
}
public T Get<T>() {
object service;
if (_registered.TryGetValue(typeof(T), out service)) {
return (T)service;
}
return _parent.Get<T>();
}
}
Run Code Online (Sandbox Code Playgroud)
为简洁起见,游戏由一组Component派生类组成:
abstract class Component {
protected ServiceLocator _ownServices;
protected List<Component> _components = new List<Component>();
...
public Component(ServiceLocator parentServices) {
_ownServices = new ServiceLocator(parentServices);
}
... …
Run Code Online (Sandbox Code Playgroud)