[英]C# to C++ static class
我正在將一些代碼從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();
}
基本上,temperatureClass是一個實用程序類,用於執行不會創建任何實例的計算。 我有幾個問題:
或更籠統地說,像C ++中那樣實現實用工具類的方式是什么?
offset
變量是整數類型,如果聲明為static,則可以使用與C#中相同的方式進行初始化(但您可能要添加const
) context
是靜態的,則訪問器也必須是靜態的,因為靜態成員函數無法訪問非靜態成員變量 請注意,我認為這不是好的設計。 從我的角度來看,C ++中的“全靜態類”沒有太多意義,我寧願在隔離的名稱空間中使用set free函數。 無論如何,如果您選擇“靜態類”方法,建議您將默認構造函數聲明為私有,以明確表明該類沒有實例化。
在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);
}
C#中的靜態類只是無法實例化的類,僅包含靜態方法。
C ++中沒有顯式的靜態類,但是您可以通過將構造函數隱藏為私有的並提供公共靜態方法來在C ++中實現相同的目的。
通過靜態初始化:
class temperatureClass {private:static int offset; };
int temperatureClass :: offset = 50;
您可以使其保持靜態,因此將盡可能地遵循原始格式。
一些空中代碼,但不允許它通過編譯器(因此,如果發生錯誤,請告訴我,我會修復它,但是我認為大多數內容都應該已經從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 ++)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.