簡體   English   中英

BOOST_FUSION_ADAPT_ADT 找不到設置方法

[英]BOOST_FUSION_ADAPT_ADT not finding setter method

我正在嘗試將 BOOST_FUSION_ADAPT_ADT 應用於 class,如下所示:

class XY {
private:
    std::string x; // lhs
    std::list<std::list<std::string>> y;

public:
    std::list<std::list<std::string>> const &getY() const {
        return y;
    }

    void setY(std::list<std::list<std::string>> const &y) {
        this->y = y;
    }

    std::string const &getX() const { return x; }

    void setX(std::string const &x) { this->x = x; }
};

但是,我收到以下錯誤,我無法弄清楚出了什么問題。

xxxxxxxxxxxxxxx: error: no matching function for call to ‘Rule::setY(const std::__cxx11::basic_string<char>&)’
                        (std::list<std::list<std::string>> const&, std::list<std::list<std::string>> const&, obj.getY(), obj.setY(val))
                                                                                                                         ^
xxxxxxxxxxxxxxx: note: candidate: void Rule::setY(const std::__cxx11::list<std::__cxx11::list<std::__cxx11::basic_string<char> > >&)
     void setY(std::list<std::list<std::string>> const &y) {

你不播種你如何使用它。 但是,當我嘗試時沒有問題:

Live On 編譯器資源管理器

#include <boost/fusion/adapted.hpp>
#include <boost/fusion/include/copy.hpp>
#include <string>
#include <list>
#include <fmt/ranges.h>
using namespace std::string_literals;
using Lists = std::list<std::list<std::string> >;

class XY {
  private:
    std::string x;
    Lists y;

  public:
    void setY(Lists       const& y) { this->y = y; }
    void setX(std::string const& x) { this->x = x; }

    [[nodiscard]] Lists       const& getY() const { return y; }
    [[nodiscard]] std::string const& getX() const { return x; }
};

BOOST_FUSION_ADAPT_ADT(XY,
        (obj.getX(), obj.setX(val))
        (obj.getY(), obj.setY(val))
    )

int main() {
    XY test;
    boost::fusion::copy(
        std::make_tuple("hello", Lists { {"world"s, "bye"s}, {"world"s} }),
        test);

    fmt::print("{}\n{}\n",
            test.getX(),
            test.getY());
}

印刷

hello
{{"world", "bye"}, {"world"}}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM