是否可以使用接受类型或模板作为模板参数的模板?
我使用部分模板专业化尝试了以下操作,但失败了:
#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'
答案 0 :(得分:2)
static_assert(Trait<TemplateHolder<Foo>>::value, "");
不再是语法错误。您必须自己将模板推入支架。
除此之外,不,你要求的东西不起作用。