簡體   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