是 - 括号 - 构造的类型特征 [英] Is-braces-constructible type trait

查看:173
本文介绍了是 - 括号 - 构造的类型特征的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我如何检查特定类型的类型名称牛逼是否从方式参数类型名称参数... args 构造的 T {参数数量...} ?我知道的std :: is_constructible&LT的; T,参数数量...> 键入从&LT特质; type_traits> ,但它使用括号,而不是大括号的作品。我没有在型性状写作太多的经验,所以我不能提供最初的例子。作为简化我们可以接受的任何合理的断言,即使这将导致一般性不太显著损失


解决方案

 模板< T类,类型名称参数... args>
decltype(无效(T {性病:: declval<&参数数量GT;()...})的std :: true_type())
试验(INT);模板< T类,类型名称参数... args>
的std :: false_type
测试(...);模板< T类,类型名称参数... args>
结构is_braces_constructible:decltype(测试< T,参数数量...>(0))
{
};

How can I check whether specific type typename T is constructible from arguments typename ...Args in the manner T{Args...}? I aware of std::is_constructible< T, Args... > type trait from <type_traits>, but it works with parentheses, not curly braces. I do not have too much experience in writing of type traits, so I cannot provide initial example. As simplification we can accept any reasonable assertions, even if this leads to not too significant loss of generality.

解决方案

template<class T, typename... Args>
decltype(void(T{std::declval<Args>()...}), std::true_type())
test(int);

template<class T, typename... Args>
std::false_type
test(...);

template<class T, typename... Args>
struct is_braces_constructible : decltype(test<T, Args...>(0))
{
};

这篇关于是 - 括号 - 构造的类型特征的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆