gpt4 book ai didi

c++ - 使用零长度元组 boost 异常,如何解决

转载 作者:太空宇宙 更新时间:2023-11-04 12:13:27 26 4
gpt4 key购买 nike

我在使用 boost 异常和带有零参数的 make_tuple 时遇到了限制。本质上我有一个这样的宏:

#define MAKE_EXCEPT( msg, ... ) exception( msg ) << make_tuple(__VAR_ARGS__)

其中变量参数将是各种 error_info 类型。 上面的内容是从完整的宏中简化而来的,我刚刚去掉了给我带来麻烦的部分。

问题是,如果没有参数,我会得到一个以上的错误 operator<<为涉及的类型定义。也就是说,虽然 make_tuple()定义明确(我什至在其他地方使用过)异常重载在这里不起作用。

我现在正在寻找解决方法。因此,我没有直接使用运算符,而是将其包装在一个函数中:

#define MAKE_EXCEPT( msg, ... ) make_except( exception( msg ), make_tuple(__VAR_ARGS__) )

现在,问题是我如何特化这个函数?我需要一个适用于普通元组的版本和一个适用于 null_tuple 的版本。

最佳答案

我找到了一些有用的东西。这似乎过于复杂。也许其他人有更好/更简单的解决方案。

在这段代码中 make_except 被调用为 error_with_tags

template<typename E, typename T,int CNT>
struct error_with_tags_helper
{
E const & operator()( E const & x, T const & t )
{
x << t;
return x;
}
};

template<typename E, typename T>
struct error_with_tags_helper<E,T,0>
{
E const & operator()( E const & x, T const & t )
{
return x;
}
};

template<typename E, typename T>
inline E const & error_with_tags( E const & x, T const & t )
{
error_with_tags_helper<E,T,boost::tuples::length<T>::value> et;
return et(x,t);
}

关于c++ - 使用零长度元组 boost 异常,如何解决,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8800638/

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