2012-03-28 5 views
2

C++로 작성된 커다란 시뮬레이션이 있습니다. 시뮬레이션을위한 주요 작업 단위는 뉴런을 나타내는 클래스입니다. 계산을하기 위해 뉴런 클래스의 각 인스턴스는 온도에 액세스해야합니다. 각 시뮬레이션은 수십만 개의 뉴런 클래스 인스턴스를 사용하며 온도는 각 뉴런에 대해 동일한 값입니다. 이러한 이유로, 나는 그것을 일반 멤버 데이터로 저장하지 않으려 고합니다. 따라서 신경 클래스의 각 인스턴스는 자체 복사본을 저장하는 메모리를 차지할 필요가 없습니다. 이상적으로 정적 멤버 변수 (또는 최후의 수단으로 전역 변수)로 저장합니다. 그러나 사용자 입력으로 런타임에 결정되는 온도가 필요합니다. Neruon 클래스에 정적 멤버 데이터 방식으로이 변수에 대한 액세스 권한을 부여하는 간단한 방법이 있습니까?C++에서 정적으로 클래스에 사용자 입력 받기

+0

사용자가 온도 값을 입력 할 때 왜 뉴런 클래스의 정적 필드를 업데이트 할 수 없습니까? –

+0

계산에 매개 변수로'temperature'를 전달할 수 있습니까? –

답변

1

변수가 정적이기 때문에 변수가 정적 일 필요는 없음을 의미하지는 않습니다. 아래 코드를 참조하십시오.

#include <cassert> 

struct X { 
    int member; 
    static int static_var; 
}; 

int X::static_var; 

int main() { 
    X x; 
    x.member = 1; 
    x.static_var = 2; 

    X y; 
    y.member = 3; 
    y.static_var = 4; 

    X::static_var = 5; 

    assert(x.static_var == y.static_var); 
    assert(&x.static_var == &y.static_var); 
} 
+0

그게 바로 내가 뭘 찾고 있었는지 고마워! 내 OOP 절단은 진행중인 작업이며이 참조를 포함하지 않았습니다. 다시 한 번 감사드립니다! – cipher42

+1

@cipher, 귀하의 질문에 대한 대답이 * 답을 * 수락하십시오. –

1

static 멤버 함수 만 제공하면 런타임에 호출하고 온도 멤버를 설정할 수 있습니다.
또는 static 구성원을 public으로 직접 설정할 수 있습니다. 개인적인 선택으로는 구성원 함수를 통해 수행하는 것을 선호합니다.

class Neuron 
{ 
    public: 
     static void setTemperature(int i) 
     { 
      mTemp = i; 
     } 

    private: 
     static int mTemp; 
}; 

int Neuron::mTemp = 0; 


int main() 
{ 
    //Get Temperature at run-time 
    Neuron::setTemperature(10); 

    return 0; 
} 
+0

완벽한, 고마워요! – cipher42

0

전 세계에 대한 좋은 후보로 생각됩니다. 온도를 사용하는 시뮬레이션에 무언가를 추가하면 어떻게 될까요?

누구든지 언제든지 전역 변수를 수정할 수 있으므로 가장 좋은 해결책은 IMO가 getTemperature()과 같이 전체적으로 범위가 지정된 (표준) 함수를 사용하는 것입니다. 그러면 언제든지 모든 객체가 호출 할 수 있습니다. 자체 C 파일에 넣고 정적으로 표시하면 선택한 메커니즘을 통해서만 액세스 할 수 있습니다.

또 다른 방법은 그저 싫으면 정적 인 Globals 또는 SimulationInputs 클래스를 만들고 온도와 같은 것들에 대한 게터를 작성하는 것입니다.

0

싱글 톤, 글로벌, 정적 데이터, 오 마이!

C++의 데이터 모델을 사용하면 다양한 메커니즘과 해킹을 통해 데이터에 대한 전역 액세스 권한과 데이터 인스턴스 수를 제한 할 수 있습니다.

우리가 할 수 있다고해서, 우리가해야한다는 것을 의미하지는 않습니다. 솔루션 일 수있는 디자인을 가지고 있기 때문에 선택해야한다는 의미는 아닙니다.

일반적으로 자신의 데이터를 관리하는 클래스가 있습니다. 객체가 관리하지 않는 데이터가 필요한 경우 매개 변수로 전달합니다.

온도를 매개 변수로 전달하십시오. 암시 적보다 암묵적인 것이 낫습니다.

Neurons을 나타내는 클래스가 있다고하셨습니다. 나는 당신이 Neuron을 의미한다고 생각하지만, 모두 함께 유지하는 Neurons 클래스를 갖는 것이 좋을 것입니다. 그것은 모든 Neuron 계산에 적용되는 온도를 가질 수 있습니다.

관련 문제