有没有办法存储特定类型C++的可变参数模板

问题描述 投票:0回答:1

假设我有以下场景,其中我正在打印

std::size_t
类型的模板。

template<std::size_t st>
void print_sizes(){std::cout<<st<<std::endl;}

template<std::size_t st, std::size_t M, std::size_t... Rest>
void print_sizes(){
    std::cout<<st<<std::endl;
}

int main(){
    print_sizes<10, 12, 3>();
    return 0;
}

以上内容完全有效。但是,我想知道是否有一种方法可以存储

10,12,3
可变参数模板,如下所示:

template<std::size_t st>
void print_sizes(){std::cout<<st<<std::endl;}

template<std::size_t st, std::size_t M, std::size_t... Rest>
void print_sizes(){
    std::cout<<st<<std::endl;
    print_sizes<M, Rest...>();
}

using example = 10,12,3;
int main(){
    print_sizes<example>();
    return 0;
}

显然,这不起作用并会引发错误。有没有办法做这样的事情?

c++ c++11 variadic-templates
1个回答
0
投票

你不能轻易存储

10, 12, 3
参数包,但你可以存储实例化的模板:

#include <iostream>

template<std::size_t st>
void print_sizes(){std::cout<<st<<std::endl;}

template<std::size_t st, std::size_t M, std::size_t... Rest>
void print_sizes(){
    std::cout<<st<<std::endl;
    print_sizes<M, Rest...>();
}

int main(){
    auto f = print_sizes<10, 12, 3>; // save instantiated template

    f();                             // invoke it.
    return 0;
}
© www.soinside.com 2019 - 2024. All rights reserved.