Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/templates/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类型名和标量常量的可变模板_C++_Templates_Variadic Templates - Fatal编程技术网

C++ 类型名和标量常量的可变模板

C++ 类型名和标量常量的可变模板,c++,templates,variadic-templates,C++,Templates,Variadic Templates,我正在尝试实现一个通用类模板,该模板将其模板参数转发给另一个类,如下所示: template <typename... Args> class A : public B<Args...> { ... template <size_t N> class B { ... template <typename T, size_t N> class B { ... 模板 A类:公共B类 { ... 问题是B可以有如下标量常量

我正在尝试实现一个通用类模板,该模板将其模板参数转发给另一个类,如下所示:

template <typename... Args>
class A : public B<Args...>
{
    ...
template <size_t N>
class B
{
    ...
template <typename T, size_t N>
class B
{
    ...
模板
A类:公共B类
{
...
问题是B可以有如下标量常量模板:

template <typename... Args>
class A : public B<Args...>
{
    ...
template <size_t N>
class B
{
    ...
template <typename T, size_t N>
class B
{
    ...
模板
B类
{
...
甚至像这样:

template <typename... Args>
class A : public B<Args...>
{
    ...
template <size_t N>
class B
{
    ...
template <typename T, size_t N>
class B
{
    ...
模板
B类
{
...

那么,有没有办法接受混合的类型名和标量常量作为可变模板参数呢?

您可以将值嵌入到类型中。如果我没有记错的话,这是boost长期使用的一种技术,并作为
std::integral_constant
添加到C++11的标准库中(表明它的有用性)

有了C++17,事情变得更简单了

template<auto val>
struct constant : std::integral_constant<decltype(val), val> {};

这似乎是目前标准的最佳解决方案,谢谢。