gpt4 book ai didi

c++ - Boost.Fusion 定义结构数组成员

转载 作者:行者123 更新时间:2023-11-30 05:03:29 26 4
gpt4 key购买 nike

你是怎么做到的?

using char10 = char[10];  
BOOST_FUSION_DEFINE_STRUCT(
(demo), employee,
(char10, name))

不起作用:
main.cpp:8:1: 错误:'boost::call_traits::param_type {aka const char* const}' 到 'char10 {aka char [10]}' 的分配不兼容类型

using char10 = char[10];
BOOST_FUSION_DEFINE_STRUCT(
(demo), employee,
(decltype(char10{}), name))

也不行:
main.cpp:8:1: 错误:引用类型 'char (&)[10]' 的值初始化

最佳答案

这对于 C 风格的数组是不可能的,因为 C 具有臭名昭著的数组到指针衰减属性(并且仍然绑定(bind) C++ 以实现向后兼容性)。

这会中断,因为 Fusion 宏会生成如下代码:

namespace demo {
struct employee {
typedef employee self_type;
char10 name;
employee() : name() {}
employee(self_type const &) = default;
employee(self_type &&) = default;
template <typename Seq>
employee(Seq const &seq, typename boost::disable_if<boost::is_convertible<Seq const &, char10> >::type * = 0)
: name(boost::fusion::deref(boost::fusion::advance_c<0>(boost::fusion::begin(seq)))) {}
self_type &operator=(self_type const &) = default;
self_type &operator=(self_type &&) = default;
template <typename Seq> self_type &operator=(Seq const &seq) {
typedef typename boost::fusion::result_of::begin<Seq const>::type I0;
I0 i0 = boost::fusion::begin(seq);
name = boost::fusion::deref(i0);
return *this;
}
explicit employee(boost::call_traits<char10>::param_type arg) : name(arg) {}
};
} // namespace demo

在构造函数的初始化列表中:

explicit employee(boost::call_traits<char10>::param_type arg) : name(arg) {}

arg 的类型将是 char const*,它不是字符串的有效初始值设定项(a char const(&)[10] 会,但需要

解决方案

采用 C++ 方式:

Live On Coliru (c++11)

#include <boost/fusion/include/define_struct.hpp>

using char10 = std::array<char, 10>;

BOOST_FUSION_DEFINE_STRUCT(
(demo), employee,
(char10, name))

#include <boost/core/demangle.hpp>
#include <iostream>
int main() {
demo::employee emp;
emp.name = {{'I',' ','a','m',' ','G','r','o','o','t'}};
}

如果你陷入黑暗时代,你可以使用 boost::array 代替:

Live On Coliru (c++03)

关于c++ - Boost.Fusion 定义结构数组成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49389592/

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