简体   繁体   English

C ++ / CLI和C#单例

[英]C++/CLI and C# singleton

I have a cpp/cli dll that has a DataMiner class. 我有一个具有DataMiner类的cpp / cli dll。 It is a singleton. 这是一个单身人士。 All of my cpp/cli code is in the DataMine namespace. 我所有的cpp / cli代码都在DataMine命名空间中。

public ref class DataMiner
{
private:
    DataMiner();
    void(*stdout_callback) (const char* cb);
    static DataMiner dm_instance;
public:
    static property DataMiner^ Instance { DataMiner^ get() { return %dm_instance; } }
    void setCB(System::IntPtr cb);
    void status_print(std::string s);
    void K_Means(array<float>^ data);
};

I also have a cpp/cli class that I use to do some math: 我也有一个cpp / cli类,可以用来做一些数学运算:

public ref class KMeans
{
private:
    int _N;
    int _K;
    int* _kMembership;
    float _kSSE;
    float* _sse;
    float* _individualSE;
    float* _data;
    float* _centroids;
    float** _distances;
    KMeans() {};
    //void reformClusters();
public:
    KMeans(float* data, int N, int K);
    KMeans(float* data, float* centroids, int N, int K);
    ~KMeans();
};

On the C# side, I have the following (correctly working) lines: 在C#端,我有以下几行(正确运行):

DataMiner dm = DataMiner.Instance;
dm.setCB(Marshal.GetFunctionPointerForDelegate(MainWindow.Instance.statusWindow.dz));

However, when I try this same line on the cpp/cli side KMeans constructor, it does not work: 但是,当我在cpp / cli端KMeans构造函数上尝试同一行时,它不起作用:

KMeans(float* data, int N, int K)
{
    // (some code)
    DataMiner dm = DataMiner.Instance;
    // (some more code)
}

The actual error messages I get are: 我收到的实际错误消息是:

DataMine::DataMiner : illegal use of this type as an expression left of '.Instance' must have class/struct/union
'DataMine::DataMiner::DataMiner' : candidate function(s) not accessible

My C++/CLI is a little rusty, but I think you want to use 我的C ++ / CLI有点生锈,但是我认为您想使用

DataMiner dm = DataMiner::Instance;

Because the :: operator is used for static members. 因为::运算符用于静态成员。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM