小编The*_*uck的帖子

针对仅具有实现所述接口的一个类的接口进行编程

我可以理解为什么要针对接口而不是实现进行编程.但是,在以下示例中(我发现了很多):

public interface ISomething
{
    void BlahOne(int foo);
    void BlahTwo(string foo);
}

public class BaseSomething : ISomething
{
    public void BlahOne(int foo)
    {
        //impl 
    }

    public void BlahTwo(string foo)
    {
        //impl
    }
}

public class SpecificSomethingOne : BaseSomething
{
    public void SpecificOne()
    {
        //blah
    }
}

public class SpecificSomethingTwo : BaseSomething
//and on..
Run Code Online (Sandbox Code Playgroud)

目前的例子是我游戏中基于组件的实体系统.(我有IComponent,Component,PosComponent等).

但是,我看不出有ISomething的理由.名称可能看起来更好,但它似乎没有目的.我可以一直返回BaseSomething.

当你有一个基本实现一切使用时,有没有理由有一个接口?(我可以看到IComparable或IEnumerable的用途)

编辑:对于略有不同的情况(但仍然相关,不需要一个不同的问题),如果我假设我有所有的这个结构,如果我ISomething用于参数类型和变量相比,会有很大的区别BaseSomething吗?

c# implementation design-patterns interface

3
推荐指数
1
解决办法
1751
查看次数

具有提升构造函数的递归类型同义词

我有一种很好的方法将多个类型参数包装成一个。

data WorldModel = WorldModel Type Type Type
-- plus type families to extract them
Run Code Online (Sandbox Code Playgroud)

我有一个type PlainWorldModel = 'WorldModel Some Instantiation Here工作正常的类型同义词。

现在我希望参数化是递归的, type PlainWorldModel = 'WorldModel Some Instantiation (Here PlainWorldModel)由于替换,我显然无法使用类型同义词来实现这一点。

我怎样才能用新类型做到这一点?我无法使新类型字段的类型为WorldModel,只能为Type

我需要带进来吗singletons

简而言之,

type PlainWorldModel = 'WorldModel Some Instantiation Here -- this was fine
type PlainWorldModel = 'WorldModel Some Instantiation (HereParameterised PlainWorldModel) -- I want to do this and it is not fine

newtype PlainWorldModel = PWM ( 'WorldModel …
Run Code Online (Sandbox Code Playgroud)

haskell data-kinds recursive-type

3
推荐指数
1
解决办法
69
查看次数

boost :: shared_ptr使用weak_ptr循环中断

我目前的情况如下:

struct A {  
  shared_ptr<B> b;  
};  
struct B {  
  shared_ptr<A> a;  
};

//...
shared_ptr<A> a(new A());
shared_ptr<B> b(new B());  
a->b(b);
b->a(a);
Run Code Online (Sandbox Code Playgroud)

我知道这不起作用,因为引用将继续指向彼此.我也被告知weak_ptr解决了这个问题.

但是,weak_ptr没有得到或->超载.我听说过"使用lock()",但任何人都可以提供如何正确执行此操作的代码示例吗?

c++ boost smart-pointers circular-dependency weak

2
推荐指数
1
解决办法
3489
查看次数

PyQt和QSignalMapper/lambdas - 多个信号,单个插槽

我在PyQt的菜单上有一个动作列表,每个我想要显示的不同的一个动作.所以我有一个Y,它将活动进给设置为Y,Z将其设置为Z等等(对于webcomic阅读程序).

我在菜单上都有,并认为自动化方法可能会更好; 而不是每次打字.类似于将其添加到字典中的函数,然后将其与每个插槽的信号连接到单个插槽.

但是,我想要这个插槽函数,比如它叫做Foo,用一个参数来决定点击了什么.因此,如果单击X,则X,Y通过Y等.

环顾四周,一个SO问题说要使用lambda,看起来并不正确......不知何故.

另一种方式是使用QSignalMapper.我试着寻找这个,但找不到如何使用它的例子.

有人可以帮忙吗?

谢谢!

python qt signals pyqt signals-slots

1
推荐指数
1
解决办法
1364
查看次数

哈希映射,字符串比较和std :: map?

首先,我想提出一些我认为是真实的观点.请问这些可以验证吗?

  • 哈希映射通过以某种方式将它们转换为整数来存储字符串.
  • std :: map不是哈希映射,如果我使用字符串,我应该考虑使用哈希映射来解决内存问题?
  • 字符串比较不好依赖.

如果std :: map不是哈希映射而且我不应该依赖字符串比较(基本上,我有一个字符串作为键的地图......我被告知要使用哈希映射来查找?),是否有哈希在C++ STL中映射?如果没有,Boost怎么样?

其次,哈希图是否值得[原创] std::map< std::string, non-POD GameState >

我认为我的观点正在实现......我计划拥有一个不同游戏状态的商店,我可以查看并注册到工厂.如果需要更多信息,请询问.

谢谢你的时间.

c++ hashmap

0
推荐指数
2
解决办法
8668
查看次数