其他分享
首页 > 其他分享> > C模板作为模板的参数

C模板作为模板的参数

作者:互联网

我遇到了以下问题.我有以下模板编号:

template<int n>
struct Number
{
    static const int value = n;
};

现在假设我想在编译时添加两个这样的数字.具体来说,我想让以下代码片段起作用:

//The following code should display 7:
std::cout << Number_add< Number<3>, Number<4> >::value << std::endl;

我试过这样的东西,但我的编译器不喜欢它.

template<Number<int> n1, Number<int> n2>
struct Number_add
{
    static const int value = n1::value + n2::value;
}

实现Number_add的正确方法是什么?我认为这里可能需要模板模板参数,但我也无法使用它.非常感谢帮助.

解决方法:

数&LT INT&GT不能用作non-type template parameter,因为用户定义的类不是允许的类型之一.允许的类型(从cppreference.com转载):

  • std::nullptr_t (since C++11);
  • integral type;
  • lvalue reference type (to object or to function);
  • pointer type (to object or to function);
  • pointer to member type (to member object or to member function);
  • enumeration type.

你可以像评论中建议的那样简单地做

template<typename n1, typename n2>
struct Number_add
{
    static const int value = n1::value + n2::value;
}

标签:template-templates,c,templates,compile-time
来源: https://codeday.me/bug/20190828/1753425.html