diff --git a/Examples/RTTI/RTTI_component/Examples/Cpp/RTTI_example.cpp b/Examples/RTTI/RTTI_component/Examples/Cpp/RTTI_example.cpp index dec8b000..29537a40 100644 --- a/Examples/RTTI/RTTI_component/Examples/Cpp/RTTI_example.cpp +++ b/Examples/RTTI/RTTI_component/Examples/Cpp/RTTI_example.cpp @@ -99,6 +99,48 @@ int main() animal = iter->GetNextAnimal(); assert(animal == nullptr); + + // Test GetNextOptionalAnimal - class out parameter with bool return + std::cout << std::endl; + std::cout << "Testing GetNextOptionalAnimal:" << std::endl; + auto iter2 = zoo->Iterator(); + PAnimal optionalAnimal; + bool hasError; + + hasError = iter2->GetNextOptinalAnimal(optionalAnimal); + assert(hasError == true); + assert(optionalAnimal != nullptr); + std::cout << " Got animal: " << optionalAnimal->Name() << std::endl; + assert(std::dynamic_pointer_cast(optionalAnimal) != nullptr); + + hasError = iter2->GetNextOptinalAnimal(optionalAnimal); + assert(hasError == true); + assert(optionalAnimal != nullptr); + std::cout << " Got animal: " << optionalAnimal->Name() << std::endl; + assert(std::dynamic_pointer_cast(optionalAnimal) != nullptr); + + std::cout << "✓ GetNextOptinalAnimal test passed" << std::endl; + + // Test GetNextMandatoryAnimal - class out parameter with bool return + std::cout << std::endl; + std::cout << "Testing GetNextMandatoryAnimal:" << std::endl; + auto iter3 = zoo->Iterator(); + PAnimal mandatoryAnimal; + + hasError = iter3->GetNextMandatoryAnimal(mandatoryAnimal); + assert(hasError == true); + assert(mandatoryAnimal != nullptr); + std::cout << " Got animal: " << mandatoryAnimal->Name() << std::endl; + assert(std::dynamic_pointer_cast(mandatoryAnimal) != nullptr); + + hasError = iter3->GetNextMandatoryAnimal(mandatoryAnimal); + assert(hasError == true); + assert(mandatoryAnimal != nullptr); + std::cout << " Got animal: " << mandatoryAnimal->Name() << std::endl; + assert(std::dynamic_pointer_cast(mandatoryAnimal) != nullptr); + + std::cout << "✓ GetNextMandatoryAnimal test passed" << std::endl; + std::cout << std::endl; } catch (std::exception &e) { diff --git a/Examples/RTTI/RTTI_component/Examples/CppDynamic/RTTI_example.cpp b/Examples/RTTI/RTTI_component/Examples/CppDynamic/RTTI_example.cpp index 3ee5e73f..addeb2bc 100644 --- a/Examples/RTTI/RTTI_component/Examples/CppDynamic/RTTI_example.cpp +++ b/Examples/RTTI/RTTI_component/Examples/CppDynamic/RTTI_example.cpp @@ -112,6 +112,50 @@ int main() assert(animal == nullptr); std::cout << "Trace 1" << std::endl; + + // Test GetNextOptionalAnimal - class out parameter with bool return + std::cout << std::endl; + std::cout << "Testing GetNextOptinalAnimal:" << std::endl; + auto iter2 = zoo->Iterator(); + PAnimal optionalAnimal; + bool hasError; + + hasError = iter2->GetNextOptinalAnimal(optionalAnimal); + assert(hasError == true); + assert(optionalAnimal != nullptr); + std::cout << " Got animal: " << optionalAnimal->Name() << std::endl; + assert(std::dynamic_pointer_cast(optionalAnimal) != nullptr); + + hasError = iter2->GetNextOptinalAnimal(optionalAnimal); + assert(hasError == true); + assert(optionalAnimal != nullptr); + std::cout << " Got animal: " << optionalAnimal->Name() << std::endl; + assert(std::dynamic_pointer_cast(optionalAnimal) != nullptr); + + std::cout << "✓ GetNextOptinalAnimal test passed" << std::endl; + + // Test GetNextMandatoryAnimal - class out parameter with bool return + std::cout << std::endl; + std::cout << "Testing GetNextMandatoryAnimal:" << std::endl; + auto iter3 = zoo->Iterator(); + PAnimal mandatoryAnimal; + + hasError = iter3->GetNextMandatoryAnimal(mandatoryAnimal); + assert(hasError == true); + assert(mandatoryAnimal != nullptr); + std::cout << " Got animal: " << mandatoryAnimal->Name() << std::endl; + assert(std::dynamic_pointer_cast(mandatoryAnimal) != nullptr); + + hasError = iter3->GetNextMandatoryAnimal(mandatoryAnimal); + assert(hasError == true); + assert(mandatoryAnimal != nullptr); + std::cout << " Got animal: " << mandatoryAnimal->Name() << std::endl; + assert(std::dynamic_pointer_cast(mandatoryAnimal) != nullptr); + + std::cout << "✓ GetNextMandatoryAnimal test passed" << std::endl; + + std::cout << std::endl; + std::cout << "Trace 2" << std::endl; } catch (std::exception &e) { diff --git a/Source/buildimplementationcpp.go b/Source/buildimplementationcpp.go index e4de8349..06a01a61 100644 --- a/Source/buildimplementationcpp.go +++ b/Source/buildimplementationcpp.go @@ -973,7 +973,7 @@ func buildOutCacheTemplateParameters (method ComponentDefinitionMethod, NameSpac cppParamType := getCppParamType(param, NameSpace, true); if param.ParamType == "class" || param.ParamType == "optionalclass" { - cppParamType = fmt.Sprintf("I%s%s*", ClassIdentifier, BaseClassName) + cppParamType = fmt.Sprintf("I%s%s*", ClassIdentifier, param.ParamClass) } result += cppParamType; }