繁体   English   中英

一种特定类型的变量模板参数

[英]Variadic template parameters of one specific type

为什么可变参数模板包中不允许特定类型?

template< typename T >
class Foo
{
public:
    template< typename... Values >
    void bar( Values... values )
    {
    }

    template< T... values >            <-- syntax error
    void bar( T... values )
    {
    }

    template< int... values >          <-- syntax error
    void bar( int... values )
    {
    }
};

什么在不允许这样做的理由?
是否有这方面的建议?


注意:替代方案是

  • std::initializer_list< T >没有缩小类型和{ } -brace语法
  • (丑陋的)递归特征,单独检查所有类型: 见这里

实际上,你只是允许它使用它是错误的。 T...int...是非类型参数包,它们的元素是值,因此您不能将它们用作类型说明符(并且您不能从函数调用中推断它们)。

正确用法的一个例子:

template<int... Is>
struct IntPack {};

IntPack<1,2,3> p;

要么

template< typename T >
struct Foo
{
    template< T... Ts>
    void bar()
    {
    }
};

int main()
{
    Foo<int> f;
    f.bar<1,2,3>();
}

另一个例子是std::integer_sequence

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM