小编Dou*_*oug的帖子

C#中不可变的局部"变量"

我是C#的新手(主要是C++程序员,Java是强大的第二个,而其他一些我不经常使用); 我正在使用C#和Unity,但我有一个似乎与C#相关的问题而不是Unity.

我一直在朝着功能风格的编程方向发展,即代替

// C++
int someFunction(int a) {
    int someCalculatedValue = a * a;
    someCalculatedValue /= 2;
    return someCalculatedValue * 3;
}
Run Code Online (Sandbox Code Playgroud)

我会做这样的事情

// Again C++
int someFunction(int a) {
    const int inputSquared = a * a;
    const int inputSquaredHalved = inputSquared / 2;
    return inputSquaredHalved * 3;
}
Run Code Online (Sandbox Code Playgroud)

现在,我想在C#中做到这一点,但我已经尝试过了

// C#
const float maxGrowth = GrowthRate * Time.deltaTime;
Run Code Online (Sandbox Code Playgroud)

但Mono抱怨说,maxGrowth没有被赋予"常量值" - 所以我假设C#的const关键字实际上相当于来自C++ 11的'constexpr'?

如果是这样,有没有办法在C#中做我想做的事情?最好不要调用一些容器类(除非编译器擅长提高效率?).

我假设从我所读到的内容中,C#在语言方面比C++更接近于Java; 不可变类而不是const-member函数?

c# immutability

12
推荐指数
2
解决办法
3477
查看次数

BlueCove,笔记本电脑和带蓝牙的Android平板电脑

我试图通过一个简单的应用程序获得使用蓝牙的基础知识.我也喜欢笔记本电脑应用程序,所以我可以简单地调试蓝牙通信.下面的代码是我尝试将笔记本电脑作为客户端(使用BlueCove 2.1.0)而平板电脑作为服务器(Android 2.2).

根据我的理解,这应该按照书面形式工作,而笔记本电脑正在提供平板电脑及其提供的服务.但是,该行"StreamConnection conn = (StreamConnection) Connector.open(url, Connector.READ_WRITE);"每次都返回null.

任何想法都出了什么问题?以下是代码的输出:

winsock上的BlueCove版本2.1.0
地址:68A3C44A5265
名称:WS1497
启动设备查询...
发现设备:2013E061D922
发现设备:00242BFE7375
INQUIRY_COMPLETED
设备查询已完成.
服务咨询开始.
来自:Galaxy Tab
服务搜索已完成 - 代码:1
来自:WS1190
服务搜索已完成 - 代码:4
蓝牙设备:
1.2013E061D922(Galaxy Tab)
2.00242BFE7375(WS1190)
btspp:// 2013E061D922:20; authenticate = false;加密= false; master = false ---- = null MainClass.main
中的线程"main"java.lang.NullPointerException
异常(
MainClass.java:104)BlueCove堆栈关闭完成

这是我正在使用的代码:

笔记本代码:

import java.io.DataInputStream;
import java.io.IOException;
import java.util.Vector;

import javax.bluetooth.DeviceClass;
import javax.bluetooth.DiscoveryAgent;
import javax.bluetooth.DiscoveryListener;
import javax.bluetooth.LocalDevice;
import javax.bluetooth.RemoteDevice;
import javax.bluetooth.ServiceRecord;
import javax.bluetooth.UUID;
import javax.microedition.io.Connector;
import javax.microedition.io.StreamConnection;

public class MainClass implements …
Run Code Online (Sandbox Code Playgroud)

java android bluetooth bluecove

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

如何在Android测试中创建模拟服务?

我有一个服务(叫它A),它依赖于服务B和C。

我要对A进行单元测试,因此理想情况下,我想捕获从服务发出的,将启动B或C并将其结果替换为服务的模拟实例的所有意图。但是,Android的测试设置似乎没有明显的实现方式。

意式浓缩咖啡的意图似乎与此最接近,但似乎并不涵盖与服务的绑定。有谁知道如何做到这一点?

A通过如下代码将B和C绑定到...

Intent intent = new Intent(context, B.class);
context.bindService(intent, mServiceConnection, Context.BIND_AUTO_CREATE);

...

private final ServiceConnection mServiceConnection = new ServiceConnection() {
    @Override
    public void onServiceConnected(ComponentName name, IBinder service) {
        B.BinderStub bInstance = (B.BinderStub) service;
    }
...
Run Code Online (Sandbox Code Playgroud)

java junit android android-espresso

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

C ++和结构(具有多重继承)

我一直在为我正在研究的项目研究C ++和结构。目前,我正在使用“链接”模板结构以伪特征形式添加数据字段。

虽然有效,但我想我更喜欢多重继承,例如下面的示例:

struct a {
    int a_data;
}; // 'Trait' A

struct b {
    int b_data;
}; // 'Trait' B

struct c : public a, public b {
    int c_data;
}; // A composite structure with 'traits' A and B.

struct d : public b {
    int d_data;
}; // A composite structure with 'trait' B.
Run Code Online (Sandbox Code Playgroud)

我的实验代码示例显示它们可以正常工作,但是当事情变得复杂时,它的实际工作方式让我有些困惑。

例如:

b * basePtr = new c;
cout << basePtr->b_data << endl;
b * basePtr = new d;
cout << basePtr->b_data << …
Run Code Online (Sandbox Code Playgroud)

c++ struct multiple-inheritance

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

std :: atomic library dependency(gcc 4.7.3)

我一直在尝试使用std :: atomic进行编译,并且我得到了对__atomic_load,__ atomic_store和__atomic_store_16的未解析引用.

我知道在更高版本的gcc(4.8+?)中你包括-latomic,但是我用gcc编译4.7.3; 我已经尝试添加-latomic_ops和-latomic_ops_gpl,但似乎都没有做太多.

我现在正在安装gcc 4.8.1,但我确实有一个真正需要为4.7.3编译的发布平台.

非常感谢.

编辑:好的,这里有一些导致我遇到问题的代码:

atomics.cpp
#include <atomic>
#include <stdint.h>

struct dataStruct {
    int a;
    uint16_t b;
    float c;
    dataStruct(int ai, uint16_t bi, float ci)  noexcept : a(ai), b(bi), c(ci) {
    }
    dataStruct() noexcept : dataStruct(0,0,0) {
    }
};

int main() {
    std::atomic<dataStruct> atomicValue;

    atomicValue = dataStruct(10, 0, 0);

    return atomicValue.load().b;
}
Run Code Online (Sandbox Code Playgroud)

使用"g ++ - 4.8.1*.cpp -std = c ++ 0x -latomic",这个编译很好.

使用"g ++ - 4.7.3*.cpp -std = c ++ 0x -pthread -lpthread -latomic_ops",它失败并显示以下内容:

/tmp/ccQp8MJ2.o: …
Run Code Online (Sandbox Code Playgroud)

c++ gcc shared-libraries c++11

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

QML:使用自定义QObject键入Error

我正在尝试使用QML来尝试使其更容易合并两者更加无缝; 确切地说,我正在尝试将具有结构化数据的对象链接到QML.

我有以下设置:

main.cpp中:

#include <QApplication>
#include <QQmlApplicationEngine>
#include <QtQml>
#include "dataobject.h"

int main(int argc, char *argv[])
{
    QApplication app(argc, argv);

    qmlRegisterType<DataObject>("DO", 1,0,"DataObject");

    QQmlApplicationEngine engine;
    engine.load(QUrl(QStringLiteral("qrc:///main.qml")));

    return app.exec();
}
Run Code Online (Sandbox Code Playgroud)

dataobject.h:

#ifndef DATAOBJECT_H
#define DATAOBJECT_H

#include <QObject>
#include <QVariant>
#include <iostream>

class DataObject : public QObject
{
    Q_OBJECT
    Q_PROPERTY(qreal a MEMBER a NOTIFY aChanged)
    Q_PROPERTY(qreal b MEMBER b NOTIFY bChanged)
public:
    explicit DataObject(QObject *parent = 0);

signals:
    void aChanged();
    void bChanged();

public slots:
    void printState() {
        using namespace std;
        cout << …
Run Code Online (Sandbox Code Playgroud)

c++ qt qml

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