gpt4 book ai didi

c++ - decltype 中的可变参数模板包

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

我可以这样写

template< class T0> struct Last0
{
using type = decltype(T0{}); // OK compiles. `type = T0`
};


template< class T0, class T1> struct Last1
{
using type = decltype(T0{}, T1{}); // OK, compiles. `type = T1`
};

template< class T0, class T1, class T2> struct Last3{
using type = decltype(T0{}, T1{}, T2{}); // Ok, compiles. `type = T2`
};

但是,当我使用可变参数模板时,它没有被编译:

template< class ... T> struct Last{
using type = decltype(T{} ... ); //<--- Error !!!
};

有什么问题?

最佳答案

有一个可发生包扩展的语言结构的税表(C++11,14.5.3§4)。除了 sizeof... 之外,它总是在结构中,其中逗号 , 是列表的语法分隔符,而不是运算符。表达式不能是包扩展。

要获取包中的最后一个类型,您可以这样做:

template <class Head, class... Tail>
struct Last {
typedef typename Last<Tail...>::Type Type;
};

template <class Head>
struct Last<Head> {
typedef Head Type;
};

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

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