2014-02-18 4 views
1

스칼라 코드를 C++로 변환하려고합니다. 이것은 스칼라에 처음 노출 된 것이므로 특정 코드에 문제가 있습니다. 질문이 스칼라 코드를 이해하십시오

case class SingleFactorNode(factor: SingleFactor, gate: FactorGate) extends FactorNode(factor) { 
    def factorMarginal(): Factor = { 
    val inMsg = gate.getEndGate().getMessage() 
    val factorMarginal = factor * inMsg 
    factorMarginal 
    } 
} 

커플 : 1 : 기본 클래스의 factorMarginal() 방법을 다음과 같이

sealed abstract class FactorNode(factor: Factor) extends Node { 
    private var _factor: Factor = factor 
    def factorMarginal(): Factor 
} 

가 지금은 파생 클래스가 다음과 같이 그래서, 기본 클래스가 있습니다. 시체가없는 것 같아 아무것도 반환하지 않습니다. 이게 어떻게 작동합니까? 그것은 완전히 불필요한 것입니까?

2 : 두 번째로 파생 클래스의 factorMarginal() 메서드입니다. 저것은 기본 factorMarginal 방법을 타고 넘어서 이는가. 또한이 메서드의 마지막 줄은 자체 (괄호가 없음)라는 함수이며, 그 함수가 무엇을하는지 혼란 스럽습니다. 기본 클래스 factorMarginal 또는 일종의 재귀를 구현하고 있습니까?

+1

Scala 코드를 C++로 변환하는 것은 좋지 않습니다. C++에서 알고리즘을 다시 구현할 수 없습니까? 이 알고리즘을 설명하는 연구 논문이있는 것처럼 보이는 표본이 제공됩니다. – ziggystar

답변

3

기본 클래스의 factorMarginal 메서드는 추상입니다. C에서 당신은 순수 가상 만들 것 ++ :

virtual Factor factorMarginal() = 0; 

예, 파생 클래스에서 factorMarginal 방법은 기본 클래스에서 하나를 우선합니다.

virtual Factor factorMarginal() override { 
    auto const inMsg = gate.getEndGate().getMessage(); 
    return factor * inMsg; 
} 

마지막 줄이 방법 자체를 호출하지 않지만, 같은 이름의 지역 변수를 반환 C++에서 다음과 같이 당신은 그것을 작성합니다.

이 경우에는 const을 C++로 작성해야합니다.

Scala의 sealed에 해당하는 C++는 없습니다.

+0

답변 해 주셔서 감사합니다! – Luca

+0

나는 그것을 할 예정 였지만 10 분을 기다려달라고 요청했다. :) – Luca