gpt4 book ai didi

c++ - 一种特定类型的可变模板参数

转载 作者:可可西里 更新时间:2023-11-01 18:35:41 24 4
gpt4 key购买 nike

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

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 >没有缩小类型和 { } -大括号语法
  • 一个(丑陋的)递归特征,它分别检查所有类型:see here

最佳答案

这是允许的,实际上,你只是用错了。 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 .

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

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