Как я могу проверить, существует ли конкретный тип typename T
из аргументов typename ...Args
в порядке T{Args...}
? Я знаю std::is_constructible< T, Args... >
тип от <type_traits>
, но он работает с круглыми скобками, а не фигурными фигурными скобками. У меня нет слишком большого опыта написания черт типа, поэтому я не могу представить пример. В качестве упрощения мы можем принять любые разумные утверждения, даже если это приводит к не слишком значительной потере общности.Is-braces-constructable type trait
1
A
ответ
3
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))
{
};
+0
Может ли это выражаться в терминах structs/classes, а не в терминах возвращаемых значений функций? – Orient
0
Мой класс-SFINAE-решение:
#include <type_traits>
template< typename ...types >
struct identity
{
};
template< typename ...types >
struct void_t
{
using type = void;
};
template< typename type, typename identity, typename = void >
struct is_embraceable
: std::false_type
{
};
template< typename type, typename ...arguments >
struct is_embraceable< type, identity<arguments...>, void_t< decltype(type{std::declval<arguments>()...}) > >
: std::true_type
{
};
template< typename type, typename ...arguments >
constexpr bool is_embraceable_v = is_embraceable< type, identity<arguments...> >::value;
Смежные вопросы
- 1. Scala trait with generic self type
- 2. Rust invoke trait method on generic type parameter
- 3. PHP Trait Override Protected Trait Method
- 4. Использование определения признака Trait in Trait
- 5. Обеспеченные Trait
- 6. Tagged type: type несоответствие
- 7. Определить `` copy` для trait`
- 8. Условные Trait Примеси
- 9. Как создать новый вектор Trait из векторов типов, реализующих Trait?
- 10. вопросов Trait типа и прижизненные
- 11. Что такое `trait: units` и` variance.function (trait): units` в `MCMCglmm`?
- 12. php trait, используя другой признак
- 13. Тип trait через переменную типа
- 14. Scala enum extend trait
- 15. Значение «trait» в MCMCglmm
- 16. Scala method = trait {...} Значение
- 17. trait in phpunit TestCase
- 18. Laravel ResetsPasswords Trait
- 19. Переопределение Учение Trait Свойства
- 20. PHP Trait colliding constructor
- 21. Dependency Injection для `trait`
- 22. Trait `Encodable` является закрытым
- 23. Laravel перенаправлять внутри Trait
- 24. Scala: trait extends java.nio.file.FileVisitor
- 25. slick reusable InsertAndUpdate trait
- 26. Использование методов trait в потоках
- 27. Встроенная поддержка String -> Trait?
- 28. iOS8 change UIPopoverPresentationController trait collection
- 29. Laravel Custom Trait Not Found
- 30. xUnit Добавление Trait в CollectionDefinition
@ Крис, но как насчет 'STRUCT A {станд :: установить < int > а; int b; }; using variant_type = boost :: variant; 'variant type? 'std :: initializer_list {std :: decltype >(), int()}' не имеет смысла. –
Orient
std :: is_constructable> если все аргументы одного типа .... –
IdeaHat