gpt4 book ai didi

c++ - 从 C++ 类自动将属性成员生成为字符串?

转载 作者:太空宇宙 更新时间:2023-11-04 16:14:41 25 4
gpt4 key购买 nike

我正在用 C++ 编程(还是初学者),我想知道一个关于自动将类的值成员生成为字符串的问题,例如:

class Point
{
private:
int x;
int y;

public:
std::list<std::string> getValues();
}

在我看来,我认为我必须编写函数 getValues,将整数转换为字符串并将字符串放入列表中并返回列表,但我的导师问我是否有一种方法可以自动执行此功能,而无需写代码,不知道怎么回答。

因为如果我们添加一个新的成员值(例如:int z),我们将不得不重新编写函数 getValues()。显然在 Java 中有一些方法可以做到这一点,但我想知道是否有类似的方法进入C++。

最好的问候

最佳答案

很难说出您的导师真正想从您那里得到什么,但如果我是您的导师,我希望您能了解 Boost.Fusion Adapted Structures 及其所基于的技术(尤其是类型映射)。

使用 Boost.Fusion 的示例:

#include <boost/fusion/adapted/struct/define_struct.hpp>
#include <boost/fusion/algorithm/iteration/fold.hpp>

#include <boost/lexical_cast.hpp>

#include <iterator>
#include <list>
#include <string>
#include <iostream>

BOOST_FUSION_DEFINE_STRUCT(
(), Point,
(int, x)
(long, y)
(double, z)
)

template <class Itr> struct collector_t
{
using result_type = Itr;

template <class T>
Itr operator()(Itr itr, T const& val) const { *itr = boost::lexical_cast<std::string>(val); return ++itr; }
};


int main()
{
Point p {123, 456l, 123.456};

// create and populate the resulting list using boost.fusion facilities
std::list<std::string> strings;
auto sink = std::back_inserter(strings);
boost::fusion::fold(p, sink, collector_t<decltype(sink)>());

// dump the resulting list to prove the example
for (auto s: strings) std::cout << s << '\n';

return 0;
}

关于c++ - 从 C++ 类自动将属性成员生成为字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24061172/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com