gpt4 book ai didi

boost - 强制Boost TypeIndex 报告特定的pretty_name

转载 作者:行者123 更新时间:2023-12-03 15:52:07 26 4
gpt4 key购买 nike

我想指定 Boost TypeIndex boost::typeindex::type_id<T>().pretty_name() 报告的某个类型将产生一个特定的名称。
我想解决的问题是,正如其他地方报道的,有一个特殊的案例令人困惑,那就是std::string类型(或别名)被报告为 std::__cxx11::basic_string<char, std::char_traits<char>, std::allocator<char> > .
(我理解这样做的原因,std::string 是一个别名。我只想在这种特殊情况下覆盖报告的字符串。)
我按照这里的说明操作 http://www.boost.org/doc/libs/1_59_0/doc/html/boost_typeindex/making_a_custom_type_index.html自定义代码的开头如下所示:

namespace my_namespace { namespace detail {
template <class T> struct typenum;
template <> struct typenum<void>{ enum {value = 0}; };
template <> struct typenum<std::string>{ enum {value = 1}; };

struct my_typeinfo {const char* const type_;};

const my_typeinfo infos[2] = {
{"void"}, {"std::string"}
};
...
...
但最后,我能做的最多就是用一种类型的报告替换另一种类型的报告,而不是仅仅修改一个案例。
一种轻量级解决方案可能是专门化 boost::typeindex::stl_type_index ( type_id<std::string>() 的输出类型)但是到那时该类的实际静态信息丢失了。 (没有专攻的类(class)。)
但是,如果没有 typeid<std::string> 的完全特化,就无法做到这一点。这似乎很难做到。
有解决方法吗?我更喜欢 Boost.Typeindex 中的解决方案,而不是运行时字符串替换。

最佳答案

这是我发现的一种非常肮脏的方式,但它并不完美,并且会在 future 产生其他问题。

struct std_string{}; // dummy replacement class name

namespace boost{
namespace typeindex{
template<> boost::typeindex::stl_type_index type_id<std::string>() noexcept{
return type_id<std_string>(); // will report "std_string", ugly, but better than `std::__cxx11::basic_string<...>`
}
}}

关于boost - 强制Boost TypeIndex 报告特定的pretty_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42611421/

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