我可以理解为什么要针对接口而不是实现进行编程.但是,在以下示例中(我发现了很多):
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
吗?
我有一种很好的方法将多个类型参数包装成一个。
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) 我目前的情况如下:
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()
",但任何人都可以提供如何正确执行此操作的代码示例吗?
我在PyQt的菜单上有一个动作列表,每个我想要显示的不同的一个动作.所以我有一个Y,它将活动进给设置为Y,Z将其设置为Z等等(对于webcomic阅读程序).
我在菜单上都有,并认为自动化方法可能会更好; 而不是每次打字.类似于将其添加到字典中的函数,然后将其与每个插槽的信号连接到单个插槽.
但是,我想要这个插槽函数,比如它叫做Foo,用一个参数来决定点击了什么.因此,如果单击X,则X,Y通过Y等.
环顾四周,一个SO问题说要使用lambda,看起来并不正确......不知何故.
另一种方式是使用QSignalMapper.我试着寻找这个,但找不到如何使用它的例子.
有人可以帮忙吗?
谢谢!
首先,我想提出一些我认为是真实的观点.请问这些可以验证吗?
如果std :: map不是哈希映射而且我不应该依赖字符串比较(基本上,我有一个字符串作为键的地图......我被告知要使用哈希映射来查找?),是否有哈希在C++ STL中映射?如果没有,Boost怎么样?
其次,哈希图是否值得[原创] std::map< std::string, non-POD GameState >
?
我认为我的观点正在实现......我计划拥有一个不同游戏状态的商店,我可以查看并注册到工厂.如果需要更多信息,请询问.
谢谢你的时间.