小编zha*_*nou的帖子

不同大小的元组上的 SFINAE 重载

考虑一个包含两种类型 -FirstObjects和 的结构SecondObjects,它们都是std::tuple<>,例如:

struct Objects
{
    using FirstObjects = std::tuple<int, int>;
    using SecondObjects = std::tuple<int>;
}; 
Run Code Online (Sandbox Code Playgroud)

为了方便我们添加以下枚举:

enum class ObjectCategory
{
    FIRST,
    SECOND
};
Run Code Online (Sandbox Code Playgroud)

现在考虑以下在Objects如上所述的类型上模板化的类(唯一的约定是它具有FirstObjectsSecondObjects且它们是std::tuple):

template <typename T>
class SomeClass
{
public:
    using FirstObjects = typename T::FirstObjects;
    using SecondObjects = typename T::SecondObjects;
    
    template <std::size_t Idx>
    using FirstObject = typename std::tuple_element<Idx, FirstObjects>::type;
    template <std::size_t Idx>
    using SecondObject = typename std::tuple_element<Idx, SecondObjects>::type;        
    
    template <ObjectCategory Category, std::size_t Idx>
    using …
Run Code Online (Sandbox Code Playgroud)

c++ overloading tuples sfinae

5
推荐指数
0
解决办法
167
查看次数

如何静态断言元组的所有类型是否满足某些条件?

我有一些类型特征SomeTraits,可以T通过 从中提取类型是否满足某些条件SomeTraits<T>::value。如何检查给定的所有类型std::tuple<>并检查(通过静态断言)它们是否都满足上述条件?例如

using MyTypes = std::tuple<T1, T2, T3>;
// Need some way to do something like
static_assert(SomeTupleTraits<MyTypes>::value, "MyTypes must be a tuple that blabla...");
Run Code Online (Sandbox Code Playgroud)

在哪里SomeTupleTraits检查SomeTraits<T>::value == true里面的每种类型是否MyTypes

我仅限于 C++14。

c++ tuples type-traits c++14

3
推荐指数
1
解决办法
614
查看次数

C++ 中如何检查一个对象是否是多个模板参数的模板类的实例?

我有以下课程:

template <typename T, typename U = UDefault>
class A;
Run Code Online (Sandbox Code Playgroud)

如何检查诸如A<float>或 之类的类型A<float, int>是否是上述模板类的实例?

我尝试修改如何检查对象是否是 C++ 中模板类的实例?进入:

template <typename T, typename U>
struct IsA : std::false_type
{};

template <typename T, typename U>
struct IsA<A<T, U>> : std::true_type
{};
Run Code Online (Sandbox Code Playgroud)

但它给出了以下错误

20:18: error: wrong number of template arguments (1, should be 2)
16:8: error: provided for 'template<class T, class U> struct IsA'
 In function 'int main()':
40:34: error: wrong number of template arguments (1, should be 2) …
Run Code Online (Sandbox Code Playgroud)

c++ templates type-traits

0
推荐指数
1
解决办法
138
查看次数

标签 统计

c++ ×3

tuples ×2

type-traits ×2

c++14 ×1

overloading ×1

sfinae ×1

templates ×1