xax*_*zak 5 c++ templates template-templates variadic-templates
如果您有模板结构,则可以使用 T 作为成员模板的值参数的类型:
\ntemplate <typename T>\nstruct SMoo\n {\n template <T I, typename T2>\n struct SBaa {};\n };\n\nSMoo<int>::SBaa<3, bool> moobaa;\nRun Code Online (Sandbox Code Playgroud)\n您可以对可变外部模板执行相同的操作:
\ntemplate <typename ... VT>\nstruct SMoo\n {\n template <VT ... VI, typename T2>\n struct SBaa {};\n };\n\nSMoo<int, bool>::SBaa<3, true, bool> moobaa;\nRun Code Online (Sandbox Code Playgroud)\n您还可以使用 T 作为成员模板的template-template 参数的 value 参数的类型:
\ntemplate <typename T>\nstruct SMoo\n {\n template <template <T I, typename T2> typename TT>\n struct SBaa {};\n };\n\ntemplate <int I, typename T>\nstruct SCaw {};\n\nSMoo<int>::SBaa<SCaw> moobaacaw;\nRun Code Online (Sandbox Code Playgroud)\n您可以将这些组合起来得到:
\ntemplate <typename ... VT>\nstruct SMoo\n {\n template <template <VT ... VI, typename T2> typename TT>\n struct SBaa {};\n };\n\ntemplate <int I, typename T>\nstruct SCaw {};\n\nSMoo<int>::SBaa<SCaw> moobaacaw;\nRun Code Online (Sandbox Code Playgroud)\n但只要有多个 VT 参数,这似乎就会失败:
\ntemplate <typename ... VT>\nstruct SMoo\n {\n template <template <VT ... VI, typename T2> typename TT>\n struct SBaa {};\n };\n\ntemplate <int I, typename VT>\nstruct SCaw {};\n\ntemplate <int I, bool B, typename VT>\nstruct SMew {};\n\nSMoo<int>::SBaa<SCaw> moobaacaw;\n\n//SMoo<int, bool>::SBaa<SMew> moobaamew; // <<=== FAILS HERE (WHY?)\nSMoo<int, bool>::SBaa<SCaw> moobaacaw2; // <<=== ALSO, DOESN'T FAIL HERE (WHY?)\nRun Code Online (Sandbox Code Playgroud)\n错误是:
\n<FILE>:5:27: error: type/value mismatch at argument 1 in template parameter list for \xe2\x80\x98template<class ... VT> template<template<template<VT ...VI, class T2> class TT> template<class ... VT> template<VT ...VI, class T2> class TT> struct SMoo<VT>::SBaa\xe2\x80\x99\n 15 | SMoo<int, bool>::SBaa<SMew> moobaamew; // <<=== FAILS HERE (WHY?)\n | ^\n<FILE>:15:27: note: expected a template of type \xe2\x80\x98template<class ... VT> template<VT ...VI, class T2> class TT\xe2\x80\x99, got \xe2\x80\x98template<int I, bool B, class VT> struct SMew\xe2\x80\x99\nRun Code Online (Sandbox Code Playgroud)\n好像VT参数没有准确匹配。
\n这可以解决吗?
\n