我是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函数?
我试图通过一个简单的应用程序获得使用蓝牙的基础知识.我也喜欢笔记本电脑应用程序,所以我可以简单地调试蓝牙通信.下面的代码是我尝试将笔记本电脑作为客户端(使用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) 我有一个服务(叫它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) 我一直在为我正在研究的项目研究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) 我一直在尝试使用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) 我正在尝试使用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)