相关疑难解决方法(0)

执行static_assert模板类型是另一个模板

我怎么static_assert样这个?如果没有C++或C++ 11中的新功能,Boost可能会支持它吗?

template<T>
struct foo {};

template<FooType>
struct bar {
  static_assert(FooType is indeed foo<T> for some T,"failure"); //how?
};
Run Code Online (Sandbox Code Playgroud)

c++ templates boost c++11

15
推荐指数
1
解决办法
2129
查看次数

如何检查类型是否是给定类模板的实例化?

是否可以检查类型是否是特定模板的实例化?

我有一个类模板,其中一个模板参数必须是特定模板的实例化,或其他类型.例如,考虑一个类型列表的简单定义:

struct null_type;

template <typename Head, typename Tail>
struct typelist
{
    // Tail must be a typelist or null_type

    typedef Head head;
    typedef Tail tail;
};
Run Code Online (Sandbox Code Playgroud)

现在,我想,以确保规定的类型Tail模板参数始终为的一个实例typelistnull_type.我可以使用部分特化来仅为这些情况定义模板,如下所示:

template <typename Head, typename Tail>
struct typelist; // default, not defined

template <typename Head, typename H, typename T>
struct typelist< Head, typelist<H,T> > // Tail = typelist, ok
{
    typedef Head head;
    typedef typelist<H,T> tail;
};

template <typename Head>
struct typelist< Head, null_type > // Tail …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-meta-programming

13
推荐指数
1
解决办法
3219
查看次数

标签 统计

c++ ×2

templates ×2

boost ×1

c++11 ×1

template-meta-programming ×1