标签: circular-dependency

具有约束层次结构的泛型

我目前面临一个非常令人不安的问题:

interface IStateSpace<Position, Value>
where Position : IPosition           // <-- Problem starts here
where Value : IValue                 // <-- and here as I don't
{                                    //     know how to get away this
                                     //     circular dependency!
                                     //     Notice how I should be
                                     //     defining generics parameters
                                     //     here but I can't!
    Value GetStateAt(Position position);
    void SetStateAt(Position position, State state);
}
Run Code Online (Sandbox Code Playgroud)

正如你到这里,既IPosition,IValueIState互相依赖.我怎么能逃脱这个?我想不出任何其他设计会绕过这种循环依赖,仍然准确描述我想要做的事情!

interface IState<StateSpace, Value>
where StateSpace : IStateSpace        //problem
where Value : IValue                  //problem
{ …
Run Code Online (Sandbox Code Playgroud)

c# oop generics circular-dependency

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

实现c ++访问者模式,避免循环依赖

我在这里用C++实现了一个访问者模式.我有这个文件结构:

Base.h
---------------
#ifndef BASE_H
#define BASE_H

#include "visitor.h"

class Base{
public: virtual void accept(const visitor& v)=0;
};

#endif

Derived.h
-----------------
#ifndef DERIVED_H
#define DERIVED_H

#include "base.h"
#include "visitor.h"

class Derived : Base {
public: virtual void accept(const visitor& v);
};

#endif

visitor.h
------------------
#ifndef VISITOR_H
#define VISITOR_H

#include "base.h"
#include "derived.h"

class visitor {
    void visit(const base& base);
    void visit(const derived& derived);
};

#endif
Run Code Online (Sandbox Code Playgroud)

cpp文件只包含.h并定义上面链接中描述的acccept方法.我对这些文件结构的问题是标头之间的循环依赖.如果我用VS 2012编译它我得到这个错误:错误C2504:基类没有定义.谢谢你的建议,抱歉我的英语不好.

编辑:我已经更改了我的代码,如下所示:

Base.h
---------------
#ifndef BASE_H
#define BASE_H

//#include "visitor.h"
class …
Run Code Online (Sandbox Code Playgroud)

c++ circular-dependency

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

iOS:循环依赖于彼此之间的调用方法

我正在尝试在我AppDelegate和我之间实现循环依赖,ViewController以从我AppDelegate到我调用方法,ViewController但是它不起作用。

请参阅我的代码,如下所示:

AppDelegate.h:

@class ViewController;

@interface AppDelegate : UIResponder <UIApplicationDelegate>
@property (strong,nonatomic) ViewController *mainView;

@end;
Run Code Online (Sandbox Code Playgroud)

AppDelegate.m:

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    return YES;
}

- (BOOL)application:(UIApplication *)app
            openURL:(NSURL *)url
            options:(NSDictionary<UIApplicationOpenURLOptionsKey,id> *)options
{
    [self.mainView doSomething];
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

ViewController.h:

#import <UIKit/UIKit.h>

@class AppDelegate;

@interface ViewController : UIViewController
@property (strong,nonatomic) AppDelegate *delegate;

-(void)doSomething;

@end;
Run Code Online (Sandbox Code Playgroud)

ViewController.m:

- (void)viewDidLoad {
    [super viewDidLoad];
    self.delegate = (AppDelegate*)[[UIApplication sharedApplication]delegate];
}

- (void)doSomething
{
    NSLog(@"doing something");
}
Run Code Online (Sandbox Code Playgroud)

我没有任何错误或警告,但doSomething …

objective-c circular-dependency ios

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

如何解决C中的循环结构依赖

所以我有两个结构体,为了简单起见,我们将它们称为ABA包含一个指向 的指针B,并B包含一个A。所以这里是代码:

#ifndef A_H
#define A_H

#include "b.h"

typedef struct _A {
    B *b;
} A;

#endif
Run Code Online (Sandbox Code Playgroud)

#ifndef B_H
#define B_H

#include "a.h"

typedef struct _B {
    A a;
} B;

#endif
Run Code Online (Sandbox Code Playgroud)

现在的问题是,当我从我的主 c 文件中导入 ah 时,我收到关于 A 是如何从 bh 未知类型的错误我不知道如何解决这个问题。

c struct circular-dependency include circular-reference

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

在 flutter 上使用 get_it 对抗循环依赖?

GetIt 是Dart 和 Flutter 项目的服务定位器( https://github.com/fluttercommunity/get_it )

我认为 GetIt 应该为我们提供一些有关循环依赖的详细信息。

例如,当我运行测试时,存在无限循环并且永远不会结束。

circular-dependency dart flutter

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

StructureMap双向/循环依赖的问题

我目前正在我们的业务层中集成StructureMap,但由于双向依赖性而存在问题.

该层包含多个管理器,每个管理器可以相互调用方法:没有通信限制或规则.这还包括可能的循环依赖性,如下例所示.我知道设计本身是有问题的,但目前我们只是希望StructureMap能够工作,并将在未来专注于进一步的重构.

每个经理实现IManager接口:

internal interface IManager
{
  bool IsStarted { get; }

  void Start();
  void Stop();
}
Run Code Online (Sandbox Code Playgroud)

并且还有自己的特定界面:

internal interface IManagerA : IManager
{
  void ALogic();
}

internal interface IManagerB : IManager
{
  void BLogic();
}
Run Code Online (Sandbox Code Playgroud)

这是两个虚拟管理器实现:

internal class ManagerA : IManagerA
{
  public IManagerB ManagerB { get; set; }

  public void ALogic() { }

  public bool IsStarted { get; private set; }
  public void Start() { }
  public void Stop() { }
} …
Run Code Online (Sandbox Code Playgroud)

structuremap circular-dependency bidirectional

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

如何修复导入的循环依赖项

我有三个文件:

testimports模块:

#import moduleTwo
import moduleOne

hiString = "Hi!"

moduleOne.sayHi()
Run Code Online (Sandbox Code Playgroud)

ModuleOne的:

import moduleTwo

class sayHi():
    moduleTwo.printHi()
Run Code Online (Sandbox Code Playgroud)

ModuleTWO中:

import testimports

def printHi():
    print(testimports.hiString)
Run Code Online (Sandbox Code Playgroud)

如果我跑testimports,我得到:

Traceback (most recent call last):
  File "..file path snipped../testimports/src/testimports.py", line 2, in <module>
    import moduleOne
  File "..file path snipped../testimports/src/moduleOne.py", line 1, in <module>
    import moduleTwo
  File "..file path snipped../testimports/src/moduleTwo.py", line 1, in <module>
    import testimports
  File "..file path snipped../testimports/src/testimports.py", line 6, in <module>
    moduleOne.sayHi()
AttributeError: 'module' object has no attribute 'sayHi'
Run Code Online (Sandbox Code Playgroud)

但是,如果我取消注释该import moduleTwo行 …

python import circular-dependency python-3.x

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

使用类模板的C++循环依赖 - 如何重构?

我正在处理C++中的循环依赖问题.

情况如下:

libA.so:
    - Body.cpp
    - Header.cpp
    - DataObject.cpp
    - DataObject::read(boost::asio::streambuf* data)
      {
          boost::asio::streambuf data;

          ....

          body = (new DataConverter<Body>)->convert(&data);
          header = (new DataConverter<Header>)->convert(&data);
      }

  libB.so:
      - DataConverter.cpp
          -> DataConverter<T>
          -> T* DataConverter<T>::convert(boost::asio::streambuf* data)

  libA.so <-> libB.so
Run Code Online (Sandbox Code Playgroud)

存在循环依赖性,因为libA使用来自libB的Converter-Class,而libB现在需要关于需要转换的libA的Object-Types - 因为DataConverter :: convert返回Body或Header对象.

我考虑用前向声明解决这个问题 - 但这对我来说似乎不是最干净的解决方案.总而言之,我的计划是提供可扩展的DataConverter解决方案.

你们有什么建议作为最佳做法?一个完全不同的设计也欢迎:)

最好,塞巴斯蒂安

c++ templates circular-dependency extensible

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

两个类互相使用

测试用例代码非常不言自明.所以基本上,这样的事情可以不使用.cpp文件吗?

class A
{
public:

    static int i;

    static void test(void)
    {
        std::cout << "B::i = " << B::i << std::endl;
    }
};

class B
{
public:

    static int i;

    static void test(void)
    {
        std::cout << "A::i = " << A::i << std::endl;
    }
};

int A::i = 1;
int B::i = 2;

int main(int argc, char **argv)
{
    A::test();
    B::test();

    return 0;
}
Run Code Online (Sandbox Code Playgroud)

c++ circular-dependency

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

目标C,由于循环依赖性导致的Swift互操作性问题

我正在开发一个几年前在Objective C中完成的iOS项目.所以我要为现有的一个实现一些新功能,所以这次我正在使用Swift来达到这个目的.

我添加了一个新的Swift类:

class CampView: UIView
{
   // Code
}
Run Code Online (Sandbox Code Playgroud)

我想在我现有的Objective C类中访问这个类.所以我喜欢:

@class CampView;
@interface NewCampViewController : UIViewController

@property (nonatomic, strong) IBOutletCollection(CampView) NSArray *campTypes;

@end
Run Code Online (Sandbox Code Playgroud)

但当我将它连接到我的故事板时,它会崩溃并显示一条消息:

由于未捕获的异常'NSUnknownKeyException'而终止应用程序,原因:'[setValue:forUndefinedKey:]:此类不是密钥值编码兼容的密钥campTypes.

另外我无法将我的系统生成的Swift头文件导入到这个特定的类中,当我这样做时会抛出如下错误:

找不到'MyApp-Swift.h'文件

这就是我@class CampView;在上面的片段中使用的原因.在调查时我发现我的NewCampViewController.h内容包含在Objective C桥接头中.所以怀疑它是由于循环依赖,但我无法解决它.

有人可以帮我解决这个问题吗?

objective-c circular-dependency ios swift

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