Fix -Wsubobject-linkage warning (#6243)

* Fix -Wsubobject-linkage warning

Having tk::spline header-only implementation included from
SmallAreaInfillFlowCompensator.hpp makes
SmallAreaInfillFlowCompensator::flowModel have separate (albeit the
same) implementation in each translation unit.

In order to fix this issue, SmallAreaInfillFlowCompensator::flowModel
converted to opaque 'pimpl'

* spline: remove anonymous namespace

Remove outer anonymous namespace from splice.h to make
forward declaration for tk::spline possible.
This commit is contained in:
Dima Buzdyk 2024-08-04 08:48:24 +06:00 committed by GitHub
parent 9ff0e9335f
commit e6ed93f0c6
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
3 changed files with 9 additions and 21 deletions

View file

@ -15,6 +15,7 @@
#include "../PrintConfig.hpp"
#include "SmallAreaInfillFlowCompensator.hpp"
#include "spline/spline.h"
#include <boost/log/trivial.hpp>
namespace Slic3r {
@ -79,6 +80,9 @@ SmallAreaInfillFlowCompensator::SmallAreaInfillFlowCompensator(const Slic3r::GCo
BOOST_LOG_TRIVIAL(error) << "Error parsing small area infill compensation model: " << e.what();
}
}
SmallAreaInfillFlowCompensator::~SmallAreaInfillFlowCompensator() = default;
double SmallAreaInfillFlowCompensator::flow_comp_model(const double line_length)
{
if(flowModel == nullptr)

View file

@ -4,25 +4,20 @@
#include "../libslic3r.h"
#include "../PrintConfig.hpp"
#include "../ExtrusionEntity.hpp"
#include "spline/spline.h"
#include <memory>
namespace Slic3r {
namespace tk {
class spline;
} // namespace tk
#ifndef _WIN32
// Currently on Linux/macOS, this class spits out large amounts of subobject linkage
// warnings because of the flowModel field. tk::spline is in an anonymous namespace which
// causes this issue. Until the issue can be solved, this is a temporary solution.
#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Wsubobject-linkage"
#endif
namespace Slic3r {
class SmallAreaInfillFlowCompensator
{
public:
SmallAreaInfillFlowCompensator() = delete;
explicit SmallAreaInfillFlowCompensator(const Slic3r::GCodeConfig& config);
~SmallAreaInfillFlowCompensator() = default;
~SmallAreaInfillFlowCompensator();
double modify_flow(const double line_length, const double dE, const ExtrusionRole role);
@ -39,10 +34,6 @@ private:
double max_modified_length() { return eLengths.back(); }
};
#ifndef _WIN32
#pragma GCC diagnostic pop
#endif
} // namespace Slic3r
#endif /* slic3r_GCode_SmallAreaInfillFlowCompensator_hpp_ */

View file

@ -46,11 +46,6 @@
#pragma GCC diagnostic ignored "-Wunused-function"
#endif
// unnamed namespace only because the implementation is in this
// header file and we don't want to export symbols to the obj files
namespace
{
namespace tk
{
@ -942,8 +937,6 @@ std::vector<double> solve_cubic(double a, double b, double c, double d,
} // namespace tk
} // namespace
#if !defined(_MSC_VER)
#pragma GCC diagnostic pop
#endif