- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
首先,我想告诉你
save
和
load
使用类
bus_schedule
.在此处调用的对象的帮助下,我遇到了获取所有成员变量的问题
new_schedule
.我假设,这个对象将帮助我获取其他类的所有成员(也许我在这一点上完全错了)。
private
这意味着我无法从
main
访问它们功能。这就是为什么,我设置了一些 getter 函数来返回一些成员值。例如,来自
bus_schedule
如果我可以返回类(class)
schedule
列出然后我可以访问
trip_info
结构值以及类型为
bus_route
的指针.
schedule
我使用的列表是:
std::list<std::pair<trip_info, bus_route *> > return_schedule()
{
return schedule;
}
在
main
我用过的功能:
bus_schedule new_schedule;
auto returning_schedule = new_schedule.return_schedule();
for(auto i:returning_schedule)
{
cout<<(i.first)<<" ~~~~~~~ "<<(i.second)<<endl;
/*with i.first I can access the struct info, i.second pointer gives me the info of
bus_route pointer value ater dereferencing*/
}
但是在这里,我再次坚持从 i.second 指针中获取单独的值。我知道这里,
bus_route
类有一个名为
stops
的列表.
Here也返回了这个。但在我看来,每次做这个反算都很麻烦。
boost
的直接解决方案?反序列化后访问所有成员变量?我将为所有类(class)设置 setter/getter 功能,但害怕找到使用这些功能的途径。
最佳答案
这个问题实际上与序列化是分开的。这是没有序列化内容的数据结构。我对代码进行了现代化改造以使用 C++17 功能
auto
和移动语义 default
编辑特殊成员 [[nodiscard]]
, override
虚拟机关键字 emplace
make_unique<>
而不是 new
/delete
#include <iostream>
#include <list>
#include <memory>
#include <string>
struct gps_position {
int degrees;
int minutes;
float seconds;
friend std::ostream& operator<<(std::ostream& os, const gps_position& gp) {
return os << ' ' << gp.degrees << "º" << gp.minutes << "'" << gp.seconds << '"';
}
};
/////////////////////////////////////////////////////////////
// One bus stop
struct bus_stop {
gps_position latitude, longitude;
[[nodiscard]] virtual std::string description() const = 0;
virtual ~bus_stop() = default;
friend std::ostream& operator<<(std::ostream& os, const bus_stop& bs) {
return os << bs.latitude << bs.longitude << ' ' << bs.description();
}
protected:
explicit bus_stop(gps_position _lat, gps_position _long)
: latitude(_lat), longitude(_long) {}
};
/////////////////////////////////////////////////////////////
// Several kinds of bus stops
struct bus_stop_corner : bus_stop {
std::string street1, street2;
[[nodiscard]] std::string description() const override {
return street1 + " and " + street2;
}
explicit bus_stop_corner(gps_position _lat, gps_position _long, std::string _s1, std::string _s2)
: bus_stop(_lat, _long), street1(std::move(_s1)), street2(std::move(_s2)) {}
};
struct bus_stop_destination : bus_stop {
std::string name;
[[nodiscard]] std::string description() const override { return name; }
bus_stop_destination(gps_position _lat, gps_position _long, std::string _name)
: bus_stop(_lat, _long), name(std::move(_name)) {}
};
struct bus_route {
using bus_stop_pointer = bus_stop*;
std::list<bus_stop_pointer> stops;
void append(bus_stop* _bs) { stops.insert(stops.end(), _bs); }
friend std::ostream& operator<<(std::ostream& os, const bus_route& br) {
for (auto& stop : br.stops) {
os << '\n' << std::hex << "0x" << stop << std::dec << ' ' << *stop;
}
return os;
}
};
/////////////////////////////////////////////////////////////
// a bus schedule is a collection of routes each with a starting time
struct bus_schedule {
struct trip_info { int hour, minute; std::string driver; };
void append(const std::string& _d, int _h, int _m, bus_route* _br) {
schedule.emplace(schedule.end(), trip_info{_h, _m, _d}, _br);
}
private:
friend std::ostream& operator<<(std::ostream& os, const bus_schedule& bs) {
for (auto const& [k,v] : bs.schedule) { os << k << *v; }
return os;
}
friend std::ostream& operator<<(std::ostream& os, const bus_schedule::trip_info& ti) {
return os << '\n' << ti.hour << ':' << ti.minute << ' ' << ti.driver << ' ';
}
std::list<std::pair<trip_info, bus_route*>> schedule;
};
int main() {
// fill in the data
// make a few stops
auto bs0 = std::make_unique<bus_stop_corner>(
gps_position{ 34, 135, 52.560F }, gps_position{ 134, 22, 78.30F },
"24th Street", "10th Avenue");
auto bs1 = std::make_unique<bus_stop_corner>(
gps_position{ 35, 137, 23.456F }, gps_position{ 133, 35, 54.12F },
"State street", "Cathedral Vista Lane");
auto bs2 = std::make_unique<bus_stop_destination>(
gps_position{ 35, 136, 15.456F }, gps_position{ 133, 32, 15.300F },
"White House");
auto bs3 = std::make_unique<bus_stop_destination>(
gps_position{ 35, 134, 48.789F }, gps_position{ 133, 32, 16.230F },
"Lincoln Memorial");
// make the schedule
bus_schedule original_schedule;
bus_route route0;
bus_route route1;
{
// make a route
route0.append(bs0.get());
route0.append(bs1.get());
route0.append(bs2.get());
// add trips to schedule
original_schedule.append("bob", 6, 24, &route0);
original_schedule.append("bob", 9, 57, &route0);
original_schedule.append("alice", 11, 2, &route0);
}
{
// make aother routes
route1.append(bs3.get());
route1.append(bs2.get());
route1.append(bs1.get());
// add trips to schedule
original_schedule.append("ted", 7, 17, &route1);
original_schedule.append("ted", 9, 38, &route1);
original_schedule.append("alice", 11, 47, &route1);
}
// display the complete schedule
std::cout << "schedule" << original_schedule;
}
打印:
schedule
6:24 bob
34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
35º136'15.456" 133º32'15.3" White House
9:57 bob
34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
35º136'15.456" 133º32'15.3" White House
11:2 alice
34º135'52.56" 134º22'78.3" 24th Street and 10th Avenue
35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
35º136'15.456" 133º32'15.3" White House
7:17 ted
35º134'48.789" 133º32'16.23" Lincoln Memorial
35º136'15.456" 133º32'15.3" White House
35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
9:38 ted
35º134'48.789" 133º32'16.23" Lincoln Memorial
35º136'15.456" 133º32'15.3" White House
35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
11:47 alice
35º134'48.789" 133º32'16.23" Lincoln Memorial
35º136'15.456" 133º32'15.3" White House
35º137'23.456" 133º35'54.12" State street and Cathedral Vista Lane
结论
map
数据结构,您可以使用循环
as the example has it :
std::list<
std::pair<bus_schedule::trip_info, bus_route*>>::const_iterator it;
for (it = bs.schedule.begin(); it != bs.schedule.end(); it++) {
os << it->first << *(it->second);
}
但是,在 C++17 中,您的编写方式与以下内容完全相同:
for (auto const& [info,route] : bs.schedule) { os << info << *route; }
您可以看到
[k, v]
使用结构化绑定(bind)来提取值类型的“第一”和“第二”部分。如果您的编译器中没有 C++17 功能,您始终可以手动执行相同操作:
for (auto const& pair : bs.schedule) {
trip_info const& info = pair.first;
bus_route const& route = *pair.second;
os << info << route;
}
游览
private
成员
operator<<
运算符:
// display the complete schedule
std::cout << "schedule";
for (auto const& [info,route] : original_schedule.schedule) {
std::cout << '\n' << info.hour << ':' << info.minute << ' ' << info.driver << ' ';
for (auto& stop : route->stops)
std::cout << '\n' << stop->latitude << stop->longitude << ' ' << stop->description();
}
打印和以前一样。
#include <iostream>
#include <list>
#include <memory>
#include <string>
struct gps_position {
int degrees;
int minutes;
float seconds;
friend std::ostream& operator<<(std::ostream& os, const gps_position& gp) {
return os << ' ' << gp.degrees << "º" << gp.minutes << "'" << gp.seconds << '"';
}
};
/////////////////////////////////////////////////////////////
// One bus stop
struct bus_stop {
gps_position latitude, longitude;
[[nodiscard]] virtual std::string description() const = 0;
virtual ~bus_stop() = default;
explicit bus_stop(gps_position _lat, gps_position _long)
: latitude(_lat), longitude(_long) {}
};
/////////////////////////////////////////////////////////////
// Several kinds of bus stops
struct bus_stop_corner : bus_stop {
std::string street1, street2;
[[nodiscard]] std::string description() const override {
return street1 + " and " + street2;
}
explicit bus_stop_corner(gps_position _lat, gps_position _long, std::string _s1, std::string _s2)
: bus_stop(_lat, _long), street1(std::move(_s1)), street2(std::move(_s2)) {}
};
struct bus_stop_destination : bus_stop {
std::string name;
[[nodiscard]] std::string description() const override { return name; }
bus_stop_destination(gps_position _lat, gps_position _long, std::string _name)
: bus_stop(_lat, _long), name(std::move(_name)) {}
};
struct bus_route {
std::list<bus_stop*> stops;
void append(bus_stop* _bs) { stops.push_back(_bs); }
};
/////////////////////////////////////////////////////////////
// a bus schedule is a collection of routes each with a starting time
struct bus_schedule {
struct trip_info { int hour, minute; std::string driver; };
void append(const std::string& _d, int _h, int _m, bus_route* _br) {
schedule.emplace(schedule.end(), trip_info{_h, _m, _d}, _br);
}
std::list<std::pair<trip_info, bus_route*>> schedule;
};
int main() {
// fill in the data
// make a few stops
auto bs0 = std::make_unique<bus_stop_corner>(
gps_position{ 34, 135, 52.560F }, gps_position{ 134, 22, 78.30F },
"24th Street", "10th Avenue");
auto bs1 = std::make_unique<bus_stop_corner>(
gps_position{ 35, 137, 23.456F }, gps_position{ 133, 35, 54.12F },
"State street", "Cathedral Vista Lane");
auto bs2 = std::make_unique<bus_stop_destination>(
gps_position{ 35, 136, 15.456F }, gps_position{ 133, 32, 15.300F },
"White House");
auto bs3 = std::make_unique<bus_stop_destination>(
gps_position{ 35, 134, 48.789F }, gps_position{ 133, 32, 16.230F },
"Lincoln Memorial");
// make the schedule
bus_schedule original_schedule;
bus_route route0;
bus_route route1;
{
// make a route
route0.append(bs0.get());
route0.append(bs1.get());
route0.append(bs2.get());
// add trips to schedule
original_schedule.append("bob", 6, 24, &route0);
original_schedule.append("bob", 9, 57, &route0);
original_schedule.append("alice", 11, 2, &route0);
}
{
// make aother routes
route1.append(bs3.get());
route1.append(bs2.get());
route1.append(bs1.get());
// add trips to schedule
original_schedule.append("ted", 7, 17, &route1);
original_schedule.append("ted", 9, 38, &route1);
original_schedule.append("alice", 11, 47, &route1);
}
// display the complete schedule
std::cout << "schedule";
for (auto const& [info,route] : original_schedule.schedule) {
std::cout << '\n' << info.hour << ':' << info.minute << ' ' << info.driver << ' ';
for (auto& stop : route->stops)
std::cout << '\n' << stop->latitude << stop->longitude << ' ' << stop->description();
}
}
Note how the code is 100 lines of code shorter than the sample even when removing all blank lines and comments, and using the same formatting.
关于c++ - 如何使用 boost 库反序列化和获取成员值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64430186/
Java 库和 android 库有什么区别,各自有什么优点/缺点? 最佳答案 您可以在 Android 应用程序中包含标准 Java .jar 文件库。它们在 .apk 构建时被翻译成 Dalvik
所以,我现在的代码就像从 Java 层加载库(比如 liba.so),并在内部 liba.so 加载 libb.so。因此,如果我必须将所有库打包到 APK 中并将其安装在没有 root 访问权限的设
我想在我的系统中设置 LEDA 库。 我已经从以下链接下载了 LEDA 库 http://www.algorithmic-solutions.info/free/d5.php Instruct
我想用 autoconf 创建一个共享库。但是,我希望共享库具有“.so”扩展名,而不是以“lib”开头。基本上,我想制作一个加载 dlopen 的插件。 .是否有捷径可寻? 当我尝试使用 autoc
我需要在 Apps 脚本应用程序上修改 PDF。为此,我想使用 JS 库:PDF-LIB 我的代码: eval(UrlFetchApp.fetch("https://unpkg.com/pdf-lib
我正在构建一个使用以下 Boost header 的程序(我使用的是 Microsoft Visual C++ 10), #include #include #include #include
当我通过 cygwin 在 hadoop 上运行此命令时: $bin/hadoop jar hadoop-examples-*.jar grep input output 'dfs[a-z.]+' 我
我已经通过 vcpgk 成功安装了一个 C++ 库,名为:lmdb:x64-windows 我还安装了lmdb通过 Cabal 安装的 Haskell 绑定(bind)包 在尝试测试 lmdb 包时:
我该如何解决这个问题? 我刚刚将 javacv jar 文件复制到我的项目 Lib 文件夹下,但出现了这个错误! 我可以找到这个thread来自谷歌,但不幸的是,由于我国的谷歌限制政策,该页面无法打开
我有一个 Android 库项目 FooLib。 FooLib 引用 Android Context 之类的东西,但不需要任何资源文件(res/ 中的东西)所以我目前将其打包为供我的应用使用的 JAR
我正在开发一个 Android 应用程序(使用 Android Studio),它能够通过手势识别算法了解您正在进行的 Activity 。对于我使用 nickgillian ithub 帐户上可用的
关于从 .NET Framework 项目中引用 .NET Standard 类库的问题有很多类似的问题,其中 netstandard 库中的 NuGet 包依赖项不会流向 netframework
我已经从互联网上下载了 jna-4.2.2.jar,现在想将这个 jar 导入到我的项目中。但是当我试图将这个 jar 导入我的项目时,出现以下错误。 [2016-06-20 09:35:01 - F
我正在尝试通过编译在 Mac 上安装 rsync 3.2.3。但是,我想安装所有功能。为此,它需要一些库,此处 ( https://download.samba.org/pub/rsync/INSTA
进入 Web 开发有点困难。过去 5 年我一直致力于 winforms 工作。所以我正在努力从一种切换到另一种。前段时间,我使用过 JavaScript,但现在还没有大量的 JavaScript 库
很难说出这里要问什么。这个问题模棱两可、含糊不清、不完整、过于宽泛或夸夸其谈,无法以目前的形式得到合理的回答。如需帮助澄清此问题以便重新打开,visit the help center . 关闭 1
我正在寻找一个用Python编写的与logstash(ruby + java)类似的工具/库。 我的目标是: 从 syslog 中解析所有系统日志 解析应用程序特定日志(apache、django、m
就目前情况而言,这个问题不太适合我们的问答形式。我们希望答案得到事实、引用资料或专业知识的支持,但这个问题可能会引发辩论、争论、民意调查或扩展讨论。如果您觉得这个问题可以改进并可能重新开放,visit
我花了几天时间试图寻找用于 JavaPOS 实现的 .jar 库,但我找不到任何可以工作的东西。我找到了很多像这样的文档:http://jpos.1045706.n5.nabble.com/file/
这个问题在这里已经有了答案: Merge multiple .so shared libraries (2 个答案) 关闭 9 年前。 我有我在代码中使用的第三方库的源代码和对象。该库附带有关如何使
我是一名优秀的程序员,十分优秀!