2010-11-16 43 views
0

我将一些代码从C#移植到C++。我不知道如何在C#中创建类似静态类的类。C#到C++静态类

// in C# 
public static temperatureClass{ 
    private static int offset = 50; 
    private static Context context; 

    public static calculateTemperature(){ 
    //use a; 
    //use context; 
    } 

    public static Context con{ 
    set{ 
     context = value; 
     } 
    } 
} 

int main() { 
Context con1; 
temperatureClass.con = con1; //con1 is a 
temperatureClass.calculateTemperature(); 
} 

基本上温度类是一个工具类来执行计算,不会创建任何实例。 我有几个问题:

  1. 如果C++版本的calculateTemperature保持静态?
  2. 如何将C++中的int偏移量初始化为静态,因为静态calculateTempearture函数使用它?
  3. 我应该如何保持con访问器在C++中是静态的,因为我需要设置上下文?

或者更一般地说,在C++中实现一个工具类的方式是什么?

回答

3
  1. C++版本很可能是只包含静态成员类
  2. offset变量被整体式的,它可以在C#初始化相同的方式,如果声明为static(但你可能要添加一const
  3. 如果context是静态的,存取必须也是静态的静态成员函数不能访问非静态成员变量

注意,我做不认为这是很好的设计。从我的观点来看,C++中的“整个静态类”中没有多少意义,我宁愿在一个孤立的名称空间中使用一组自由函数。如果你选择了“静态类”方法,我建议声明默认构造函数为private,以清楚说明该类没有指向被实例化。

0

C#中的静态类只是无法实例化的类,只包含静态方法。

  1. 有在C++中没有明确的静态类,但你完全可以通过隐藏构造为私有,并提供公共静态方法实现在C++中一样。

  2. 通过静态初始化:

    类temperatureClass { 私人: 静态INT抵消; };

    int temperatureClass :: offset = 50;

  3. 您可以将其保留为静态,因此您将尽可能地遵循原始内容。

0

一些空气代码,不让它经过编译器(所以如果有错误,请告诉我,我会修复它,但我认为大部分的东西应该被翻译正确直白从C#来C++)。

class temperatureClass 
{ 
    private: 
     static int offset = 50; 
     static Context context; 
     temperatureClass(){}; // avoid instantiation 

    public: 
    static void calculateTemperature() 
    { 
     //use a; 
     //use context; 
    } 

    static void SetCon(Context c) 
    { 
     context = c; 
    } 
}; // dont forget semicolon in C++ :-) 

int main() 
{ 
    Context con1; 
    temperatureClass::SetCon(con1); 
    temperatureClass::calculateTemperature(); 
} 

(如果这是一个好的设计,那是另一问题,但那是独立的C#或C++)

2

在C++中,你不需要静态类,因为你可以在命名空间范围内具有功能。在C#中,需要静态类,因为所有函数都必须位于类范围内。

我会做这样的事情:


// temp.h 
namespace temperature { 
    void calculateTemperature(const Context& context); 
} 

// temp.cpp 
namespace { // private stuff 
    int offset = 50; 
} 

namespace temperature { 
    void calculateTemperature(Context context){ 
    //use a; 
    //use context; 
    } 
} 

// programm.cpp 
#include "temp.h" 

int main() { 
Context con1; 
temperature.calculateTemperature(con1); 
}