模板,它接受类型或模板作为其参数

template which accepts either a type or a template as its parameter

本文关键字:参数 类型 模板      更新时间:2023-10-16

是否有可能有一个接受类型或模板作为其模板参数的模板?

我尝试使用部分模板专门化,但失败了:

#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'
<<p> 生活例子/kbd>
static_assert(Trait<TemplateHolder<Foo>>::value, "");

不再是语法错误。你必须自己把模板塞进holder中。

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