gpt4 book ai didi

c++ - 可变参数模板模板参数

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:47:53 26 4
gpt4 key购买 nike

下面的代码用clang 3.0编译不了,是不是我做错了?因为它在 c++11 中是不允许的还是因为它在 clang 中不受支持?

template<int OFFSET>
struct A {
enum O { offset = OFFSET };
};

template < template <int T> class Head, typename... Tail>
struct C : public Head<1>, private C<Tail> { };

int main()
{
C< A, A > c1;

return 0;
}

编译器错误:

test3.cxx:99:42: error: template argument for template template parameter must be a class template or type alias template
struct C : public Head<1>, private C<Tail> { };
^
test3.cxx:103:15: error: use of class template A requires template arguments
C< A, A > c1;
^
test3.cxx:94:12: note: template is declared here
struct A {
^
2 errors generated.

最佳答案

三个问题:

Tail是模板的可变列表,而不是类型。所以应该是

template<int> class... Tail

代替

typename... Tail

并且您需要使用 private C<Tail...> 显式扩展参数包而不是 private C<Tail> .

并且您需要实现基本情况,因为 Tail...是空的:

// base case
template < template <int> class Head>
struct C<Head> : public Head<1> { };

(这是为 Clang 3.0 编译的)

现在整段代码:

template<int OFFSET>
struct A {
enum O { offset = OFFSET };
};

template < template <int> class Head, template<int> class... Tail>
struct C : public Head<1>, private C<Tail...> { };
template < template <int> class Head>
struct C<Head> : public Head<1> { };

int main()
{
C< A, A > c1;
return 0;
}

关于c++ - 可变参数模板模板参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8765977/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com