接受类型或模板作为参数

时间:2016-06-27 09:04:26

标签: c++ templates c++14

是否可以使用接受类型或模板作为模板参数的模板?

我使用部分模板专业化尝试了以下操作,但失败了:

#include <type_traits>

template <template <typename...> class T>
struct TemplateHolder;

template <typename T>
struct Trait : std::true_type {};

template <template <typename...> class Template>
struct Trait<TemplateHolder<Template>> : std::true_type {};

template <typename... Ts>
struct Foo {};

struct Bar {};

static_assert(Trait<Bar>::value, "");
static_assert(Trait<Foo>::value, "");
来自GCC的

错误消息:

main.cpp:18:24: error: type/value mismatch at argument 1 in template parameter list for 'template<class T> struct Trait'

 static_assert(Trait<Foo>::value, "");
                        ^
main.cpp:18:24: note:   expected a type, got 'Foo'

live example

1 个答案:

答案 0 :(得分:2)

static_assert(Trait<TemplateHolder<Foo>>::value, "");

不再是语法错误。您必须自己将模板推入支架。

除此之外,不,你要求的东西不起作用。