小编Hug*_*l31的帖子

使用Swift Package Manager在单元测试中使用资源

我正在尝试在单元测试中使用资源文件并使用它来访问它Bundle.path,但它返回nil.

MyProjectTests.swift中的这个调用返回nil:

Bundle(for: type(of: self)).path(forResource: "TestAudio", ofType: "m4a")
Run Code Online (Sandbox Code Playgroud)

这是我的项目层次结构.我也尝试过移动TestAudio.m4a到一个Resources文件夹:

??? Package.swift
??? Sources
?   ??? MyProject
?       ??? ...
??? Tests
    ??? MyProjectTests
        ??? MyProjectTests.swift
        ??? TestAudio.m4a
Run Code Online (Sandbox Code Playgroud)

这是我的包装说明:

// swift-tools-version:4.0

import PackageDescription

let package = Package(
    name: "MyProject",
    products: [
        .library(
            name: "MyProject",
            targets: ["MyProject"])
    ],
    targets: [
        .target(
            name: "MyProject",
            dependencies: []
        ),
        .testTarget(
            name: "MyProjectTests",
            dependencies: ["MyProject"]
        ),
    ]
)
Run Code Online (Sandbox Code Playgroud)

我正在使用Swift 4和Swift Package Manager Description API版本4.

swift swift-package-manager

10
推荐指数
4
解决办法
2241
查看次数

构建错误:missingLinuxMain

当我尝试在linux上构建一个swift包时,我有一个错误:

> swift build -v
lsb_release -r
which clang
/opt/swift/usr/bin/swiftc --driver-mode=swift -L /opt/swift/usr/lib/swift/pm/4 -lPackageDescription -swift-version 4 -I /opt/swift/usr/lib/swift/pm/4 -sdk / /home/me/SwiftProject/Package.swift -fileno 5
/opt/swift/usr/bin/swiftc --driver-mode=swift -L /opt/swift/usr/lib/swift/pm/3 -lPackageDescription -swift-version 3 -I /opt/swift/usr/lib/swift/pm/3 -sdk / /home/me/SwiftProject/.build/checkouts/siesta-3156441904511450749/Package.swift -fileno 5
/opt/swift/usr/bin/swiftc --driver-mode=swift -L /opt/swift/usr/lib/swift/pm/3 -lPackageDescription -swift-version 3 -I /opt/swift/usr/lib/swift/pm/3 -sdk / /home/me/SwiftProject/.build/checkouts/SwiftyJSON-6376406316629445150/Package.swift -fileno 5
error: missingLinuxMain
Run Code Online (Sandbox Code Playgroud)

运行最后一个命令时没有错误:

/opt/swift/usr/bin/swiftc --driver-mode=swift -L /opt/swift/usr/lib/swift/pm/3 -lPackageDescription -swift-version 3 -I /opt/swift/usr/lib/swift/pm/3 -sdk / /home/me/SwiftProject/.build/checkouts/SwiftyJSON-6376406316629445150/Package.swift -fileno 5
Run Code Online (Sandbox Code Playgroud)

我在Test目录中有一个文件LinuxMain.swift:

Tests
??? ProjectTests
?   ??? SomeTests.swift
??? LinuxMain.swift
Run Code Online (Sandbox Code Playgroud)

LinuxMain.swift:

import XCTest …
Run Code Online (Sandbox Code Playgroud)

linux swift

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

处理 Boost MSM 中每个状态的错误

我正在使用 Boost MSM 来模拟机器人的行为。有多种状态,如“手动移动”、“自动移动”、“工作”、“空闲”等......但是我需要能够从任何状态强行停止机器人,将其置于无法移动的状态无法接收新命令,因此我创建了“EmergencyStopped”状态。 当机器人被要求重新武装自己时,机器人应该返回到“空闲”状态。

然而,Boost 不建议创建从所有状态到单个状态的转换,而更喜欢使用正交状态。因此,我可以执行“AllOk”和interrupt_state“EmergencyStopped”正交状态。

问题是,虽然我可以轻松地将机器人置于“紧急停止”状态,但我无法退出它并将机器人从之前的状态置于“空闲”状态。例如,如果机器人执行以下操作:

  • [工作,一切正常] -> 停止
  • [工作,紧急停止] -> 恢复

机器人将处于 [Work, AllOk] 状态,而我希望它处于 [Idle, AllOk] 状态。

所以我的问题是:

  • 我可以并且应该在此工作流程中使用正交状态吗?如果是,当我进入正交状态“EmergencyStopped”时,如何强制状态为“空闲”?
  • 或者我应该使“EmergencyStopped”成为非正交并声明从所有状态到它的过渡?
  • 或者还有其他解决方案吗?

c++ boost-msm

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

Qt 正确无主 QObject 返回语义

我有一个 QObjectSystemdDBusManager可以返回其他 QObjects(Unit类)。这些对象没有任何理由归 拥有SystemdDBusManager,但根据Qt 文档,这可能暗示返回的对象归 SystemdDBusManager 所有。

class SystemdDBusManager : public QObject
{
Q_OBJECT

public:
    Unit *getUnit(QString const &name);    
};
Run Code Online (Sandbox Code Playgroud)

什么是明确表示Unit不属于的好方法SystemdDBusManager

c++ qt qobject

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

如果重写方法不调用 C++ 中的重写实现,是否有办法发出警告?

如果重写方法不调用被重写的方法,是否有一个函数属性(标准或编译器扩展)会发出警告?

像这样:

class A
{
protected:
    [[please_call]]
    virtual void foo() { /* ... */ };
};

class B : public A
{
protected:
    void foo() override {}
    // WARNING: B::foo() does not call A::foo()
};
Run Code Online (Sandbox Code Playgroud)

c++ oop inheritance

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

标签 统计

c++ ×3

swift ×2

boost-msm ×1

inheritance ×1

linux ×1

oop ×1

qobject ×1

qt ×1

swift-package-manager ×1