Ich versuche, Klasse mit dem Barton und Nackman Trick zu implementieren, um dynamischen Versand zu vermeiden. (Ich schreibe MCMC-Code, wo Leistung wichtig ist.) Ich bin kein C++ - Experte, aber der grundlegende Trick funktioniert für mich woanders. Allerdings habe ich jetzt einen Fall, in dem die zweite abgeleitete Klasse templatiert werden muss. Dies scheint Probleme zu verursachen. Der Umriss meines Codes ist:Templeted Barton und Nackman Trick Probleme
// Generic step class
template<class DerivedStepType>
class Step {
public:
DerivedStepType& as_derived() {
return static_cast<DerivedStepType&>(*this);
}
void DoStep() {
return as_derived.DoStep();
}
};
// Gibbs step
template<class DerivedParameterType> // THIS IS THE PROBLEM
class GibbsStep : public Step<GibbsStep> {
public:
GibbsStep(DerivedParameterType new_parameter) {
}
void DoStep() {
}
};
Das Problem ist template<class DerivedParameterType>
und die folgende <GibbsStep>
(aus dem Barton und Nackman Trick). Mit g ++ v 4,01 (OSX), erhalte ich folgende Fehlermeldung:
./src/mcmc.h:247: error: type/value mismatch at argument 1
in template parameter list for 'template<class DerivedStepType> class Step'
./src/mcmc.h:247: error: expected a type, got 'GibbsStep'
Alles kompiliert in Ordnung, wenn ein Tropfen template<class DerivedParameterType>
und ersetzen DerivedParameterType
mit, sagen wir, double
.
Irgendwelche Ideen?
kleine Korrektur: GibbsStep ist eine Klasse-Template und keine Template-Klasse;) – ovanes