From 29f464189b8143ff483e7cdaa40c38fe00102d49 Mon Sep 17 00:00:00 2001 From: Roland Winklmeier Date: Wed, 29 Aug 2018 16:24:43 +0200 Subject: [PATCH] Move template in-class function definitions out of class Keeping them defined in-class caused linker issues with the extern template declaration in a non-optimized MinGW debug build. Apparently it did not inline them but instead relied on the extern declaration and expected them defined somewhere else. --- src/blackmisc/pq/physicalquantity.cpp | 12 ++++++++++++ src/blackmisc/pq/physicalquantity.h | 4 ++-- src/blackmisc/simulation/interpolator.cpp | 6 ++++++ src/blackmisc/simulation/interpolator.h | 2 +- src/blackmisc/timestampobjectlist.cpp | 6 ++++++ src/blackmisc/timestampobjectlist.h | 2 +- 6 files changed, 28 insertions(+), 4 deletions(-) diff --git a/src/blackmisc/pq/physicalquantity.cpp b/src/blackmisc/pq/physicalquantity.cpp index 0d9ac6326..67e0170d6 100644 --- a/src/blackmisc/pq/physicalquantity.cpp +++ b/src/blackmisc/pq/physicalquantity.cpp @@ -41,6 +41,18 @@ namespace BlackMisc { namespace PhysicalQuantities { + template + const MU & CPhysicalQuantity::getUnit() const + { + return m_unit; + } + + template + void CPhysicalQuantity::setUnit(const MU &unit) + { + m_unit = unit; + } + template void CPhysicalQuantity::setUnitBySymbol(const QString &unitName) { diff --git a/src/blackmisc/pq/physicalquantity.h b/src/blackmisc/pq/physicalquantity.h index e501d30fc..2c1c56501 100644 --- a/src/blackmisc/pq/physicalquantity.h +++ b/src/blackmisc/pq/physicalquantity.h @@ -70,11 +70,11 @@ namespace BlackMisc }; //! Unit - const MU &getUnit() const { return m_unit; } + const MU &getUnit() const; //! Simply set unit, do no calclulate conversion //! \sa switchUnit - void setUnit(const MU &unit) { m_unit = unit; } + void setUnit(const MU &unit); //! Set unit by string void setUnitBySymbol(const QString &unitName); diff --git a/src/blackmisc/simulation/interpolator.cpp b/src/blackmisc/simulation/interpolator.cpp index da4f46e39..153e24dc9 100644 --- a/src/blackmisc/simulation/interpolator.cpp +++ b/src/blackmisc/simulation/interpolator.cpp @@ -481,6 +481,12 @@ namespace BlackMisc this->getAndFetchModelCG(); } + template + void CInterpolator::markAsUnitTest() + { + m_unitTest = true; + } + CInterpolationResult::CInterpolationResult() { this->reset(); diff --git a/src/blackmisc/simulation/interpolator.h b/src/blackmisc/simulation/interpolator.h index 385df650b..452f87ea8 100644 --- a/src/blackmisc/simulation/interpolator.h +++ b/src/blackmisc/simulation/interpolator.h @@ -227,7 +227,7 @@ namespace BlackMisc void initCorrespondingModel(const CAircraftModel &model = {}); //! Mark as unit test - void markAsUnitTest() { m_unitTest = true; } + void markAsUnitTest(); protected: //! Constructor diff --git a/src/blackmisc/timestampobjectlist.cpp b/src/blackmisc/timestampobjectlist.cpp index a7340cb87..d5399a69f 100644 --- a/src/blackmisc/timestampobjectlist.cpp +++ b/src/blackmisc/timestampobjectlist.cpp @@ -643,6 +643,12 @@ namespace BlackMisc return dt.isValid() ? dt.toMSecsSinceEpoch() : -1; } + template + void ITimestampWithOffsetObjectList::setAdjustedSortHint(HintAdjustedTimestampSort hint) + { + m_tsAdjustedSortHint = hint; + } + // see here for the reason of thess forward instantiations // https://isocpp.org/wiki/faq/templates#separate-template-fn-defn-from-decl template class BLACKMISC_EXPORT_DEFINE_TEMPLATE ITimestampObjectList; diff --git a/src/blackmisc/timestampobjectlist.h b/src/blackmisc/timestampobjectlist.h index 279b24b9e..9c046dc2f 100644 --- a/src/blackmisc/timestampobjectlist.h +++ b/src/blackmisc/timestampobjectlist.h @@ -251,7 +251,7 @@ namespace BlackMisc qint64 oldestAdjustedTimestampMsecsSinceEpoch() const; //! Set the hint - void setAdjustedSortHint(HintAdjustedTimestampSort hint) { m_tsAdjustedSortHint = hint; } + void setAdjustedSortHint(HintAdjustedTimestampSort hint); protected: //! Constructor