考虑一个包含两种类型 -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如上所述的类型上模板化的类(唯一的约定是它具有FirstObjects和SecondObjects且它们是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) 我有一些类型特征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。
我有以下课程:
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)