我有以下特征来检测两种类型是否可除,并返回结果操作类型或另一种Default
type,否则返回:
struct default_t { };
// Overloaded template for fallbacks
template <class U, class V>
default_t operator/(U, V);
// If the expression std::declval<U>()/std::declval<V>() is valid,
// gives the return type, otherwize provide Default.
template <class U, class V, class Default>
struct div_type_or {
using type_ = decltype(std::declval<U>() / std::declval<V>());
using type = typename std::conditional<
std::is_same<type_, default_t>{},
Default,
type_>::type;
};
template <class... Args>
using div_type_or_t = typename div_type_or<Args...>::type;
当我尝试使用不可分割的std::chrono::duration
类型时,这对libstdc很有效,但对libc不起作用,例如:
struct A { };
div_type_or_t<std::chrono::seconds, A, int> b;
我得到以下错误:
/Library/Developer/CommandLineTools/usr/include/c/v1/chrono:764:81:错误:std:_1::common_type“”typename common_type::type中没有名为“type”的类型
/Library/Developer/CommandLineTools/usr/include/c/v1/chrono:777:7:注意:在“_duration_divide_imp”的默认参数的实例化中
/Library/Developer/CommandLineTools/usr/include/c/v1/chrono:784:10:注意:在模板类std:_1::chrono::_duration_divide_result的实例化中
测验cpp:16:46:注意:在将推导出的模板参数替换为函数模板“operator/”[with _Rep1=long long,_Period=std::_1::ratio]时
test.cpp:24:1:注意:在模板类的实例化中div_type_or
测验cpp:48:19:注意:在模板类型别名“div_type_或_t”的实例化中,此处请求div_type_或_t,D
据我所知,这是因为std::chrono::duration
的operator/
的以下重载失败:
template< class Rep1, class Period, class Rep2 >
duration<typename std::common_type<Rep1,Rep2>::type, Period>
constexpr operator/( const duration<Rep1, Period>& d,
const Rep2& s );
我认为,由于std::common_type
是函数签名的一部分,这将允许SFINAE工作并使用我的自定义重载运算符/
,从而推导出default_t
,但显然这不起作用...
由于这对libstdc有效,我只想知道我的代码是否有问题(可能我不理解SFINAE在这种情况下的工作方式),或者这是libc错误?
在libc,我们有:
template <class _Duration, class _Rep, bool = __is_duration<_Rep>::value>
struct __duration_divide_result
{
};
template <class _Duration, class _Rep2,
bool = is_convertible<_Rep2,
typename common_type<typename _Duration::rep, _Rep2>::type>::value>
struct __duration_divide_imp
{
};
template <class _Rep1, class _Period, class _Rep2>
struct __duration_divide_imp<duration<_Rep1, _Period>, _Rep2, true>
{
typedef duration<typename common_type<_Rep1, _Rep2>::type, _Period> type;
};
template <class _Rep1, class _Period, class _Rep2>
struct __duration_divide_result<duration<_Rep1, _Period>, _Rep2, false>
: __duration_divide_imp<duration<_Rep1, _Period>, _Rep2>
{
};
template <class _Rep1, class _Period, class _Rep2>
inline _LIBCPP_INLINE_VISIBILITY
_LIBCPP_CONSTEXPR
typename __duration_divide_result<duration<_Rep1, _Period>, _Rep2>::type
operator/(const duration<_Rep1, _Period>& __d, const _Rep2& __s)
{
typedef typename common_type<_Rep1, _Rep2>::type _Cr;
typedef duration<_Cr, _Period> _Cd;
return _Cd(_Cd(__d).count() / static_cast<_Cr>(__s));
}
因此,与其使用std::common_类型
这种用法是一个严重的错误。
我想说,在这方面,libc的实现是不正确的。
我是新的对象检测,我有泰米尔语字符,我成功地做了分类部分使用CNN。 对于对象检测,我遵循以下示例--https://towardsdatascience.com/getting-starting-with-bounding-box-regression-in-tensorflow-743E22D0CCB3 我们必须创建边界框并创建注释文件,其中包含图像中存在的对象的数量以及对象的(Xmin,Ym
我正在努力升级一些C代码,以利用C 11中的新功能。我有一个trait类,其中有几个函数返回基本类型,大多数情况下,但并非总是返回常量表达式。我想根据函数是否为来做不同的事情。我提出了以下方法: 额外的< code>int/参数的作用是,如果SFINAE之后两个函数都可用,重载解析将选择第一个函数。 用Clang 3.2编译并运行该代码显示: 所以这似乎有效,但我想知道代码是否合法C 11。特别是
本文向大家介绍特征工程的问题相关面试题,主要包含被问及特征工程的问题时的应答技巧和注意事项,需要的朋友参考一下 参考回答: 特征工程包括数据与特征处理、特征选择和降纬三部分。数据与特征处理包括: 1.数据选择、清洗、采样 数据格式化; 数据清洗,填充缺失值、去掉脏数据,将不可信的样本丢掉,缺省值极多的字段考虑不用; 采样:针对正负样本不平衡的情况,当正样本远大于负样本时,且量都很大时,使用下采样,
@subpage tutorial_py_features_meaning_cn 图像中的主要特征是什么?如果找出对我们来说有用的特征? @subpage tutorial_py_features_harris_cn 好吧, 边角是好的特征。但我们该如何找到它们呢? @subpage tutorial_py_shi_tomasi_cn 我们将会研究Shi-Tomasi角点检测。 @subpage
我需要一个类型特征,将枚举分解为它们的底层类型,并与所有其他类型的一样工作。我编写了以下代码,显然这不是SFINAE的工作方式。但这是我认为它应该如何工作的,那么这段代码到底有什么问题,我对C的理解有什么差距? MSVC中的错误完全无法理解: “detail::BaseType”:模板参数“_formal”与声明不兼容 在GCC中更好一点——说第二个模板参数的声明在两个模板之间不兼容。但是根据我对
将跟踪和跨度添加到Slf4J MDC,以便您可以从日志聚合器中的给定跟踪或跨度中提取所有日志。示例日志: 2016-02-02 15:30:57.902 INFO [bar,6bfd228dc00d216b,6bfd228dc00d216b,false] 23030 --- [nio-8081-exec-3] ... 2016-02-02 15:30:58.372 ERROR [bar,6bfd