定義函數(shù)參數(shù)數(shù)量的C++模板

假設(shè)我有一個(gè)這樣的班級(jí)

template<int n>
class A{
   array<size_t, n> sizes;
   //...
public:
   template <int k>
   A<k> reshape(array<size_t, k> new_sizes){
      return A<k>(new_sizes):
   }
};

它可以工作,但參數(shù)new_sizes是次優(yōu)的,因?yàn)槲冶仨氝@樣稱呼它:

foo.reshape(array<size_t, 3>{1,2,3});

這不起作用:

foo.reshape({1,2,3});

有沒(méi)有一種方法可以用編譯時(shí)大小定義initializer_list(所以我可以用它來(lái)代替數(shù)組),或者(甚至更好)一種方法來(lái)定義變量參數(shù)的大小,所以我可以寫(xiě)類似這樣的東西

foo.reshape(1,2,3);
? 最佳回答:

OR(甚至更好)是一種定義變量參數(shù)大小的方法,因此我可以編寫(xiě)類似foo.reshape(1,2,3);的代碼

您可以使用sizeof...參數(shù)包:

template <size_t N>
class A {
    std::array<size_t, N> sizes;

public:
    A() = default;

    template <class... Args>
    A(Args&&... ss) : sizes{static_cast<size_t>(ss)...} {}

    template <class... Args>
    A<sizeof...(Args)> reshape(Args&&... new_sizes) {
//    ^^^^^^^^^^^^^^^
        return A<sizeof...(Args)>(static_cast<size_t>(new_sizes)...);
    }
};

// deduction guide:
template <class... Args>
A(Args&&...) -> A<sizeof...(Args)>;

Demo

主站蜘蛛池模板: 人妻少妇精品视频三区二区一区| 波多野结衣一区在线| 3D动漫精品一区二区三区| 亚洲一区二区三区国产精华液| 伦理一区二区三区| 日本精品夜色视频一区二区| 人妻在线无码一区二区三区| 91福利国产在线观看一区二区 | 亚洲国产精品一区二区九九| 免费无码一区二区三区| 亚洲日本一区二区三区在线| 一区二区三区四区精品| 东京热无码av一区二区| AV天堂午夜精品一区二区三区| 日本一区二三区好的精华液| 久久99精品一区二区三区| 中文字幕在线观看一区| 精品视频一区二区| 中文无码精品一区二区三区| 视频在线一区二区| 日韩精品一区二区三区在线观看| 亚洲AV无码一区二区大桥未久 | 波多野结衣在线观看一区| 国产成人一区二区三中文| 国产精品合集一区二区三区| 亚洲AV无码一区二区一二区| 久久中文字幕一区二区| 精品亚洲AV无码一区二区三区 | 呦系列视频一区二区三区| 亚洲国产国产综合一区首页| 精品国产aⅴ无码一区二区| 久久久久人妻精品一区二区三区 | 久久精品国产一区二区| 在线观看国产区亚洲一区成人| 一区二区三区在线免费| 国产一区三区二区中文在线| 国产色情一区二区三区在线播放| 中文字幕一区二区三区有限公司| 少妇无码AV无码一区| 久久亚洲一区二区| 欧美成人aaa片一区国产精品|