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++;模板作为模板的参数_C++_Templates_Compile Time_Template Templates - Fatal编程技术网

C++ C++;模板作为模板的参数

C++ C++;模板作为模板的参数,c++,templates,compile-time,template-templates,C++,Templates,Compile Time,Template Templates,我遇到了以下问题。我有以下模板编号: template<int n> struct Number { static const int value = n; }; 模板 结构编号 { 静态常数int值=n; }; 假设现在我想在编译时添加两个这样的数字。具体地说,我想让以下代码段正常工作: //The following code should display 7: std::cout << Number_add< Number<3>, Nu

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

template<int n>
struct Number
{
    static const int value = n;
};
模板
结构编号
{
静态常数int值=n;
};
假设现在我想在编译时添加两个这样的数字。具体地说,我想让以下代码段正常工作:

//The following code should display 7:
std::cout << Number_add< Number<3>, Number<4> >::value << std::endl;
//以下代码应显示7:
std::cout::value
Number
不能用作,因为用户定义的类不是允许的类型之一。允许的类型为(复制自):

  • std::nullptr_t(从C++11开始)
  • 积分型
  • 左值引用类型(对象或函数)
  • 指针类型(指向对象或函数)
  • 指向成员类型的指针(指向成员对象或成员函数)
  • 枚举类型

您只需按照注释中的建议执行
n.m

template<typename n1, typename n2>
struct Number_add
{
    static const int value = n1::value + n2::value;
}
模板
结构编号\u添加
{
静态常量int value=n1::value+n2::value;
}
模板
constexpr数
运算符+(数字,数字){return{};}
模板
使用Number_add=decltype(Lhs{}+Rhs{});

std::cout::value
template struct Number\u add
Ah,很有效,非常感谢!
template<typename n1, typename n2>
struct Number_add
{
    static const int value = n1::value + n2::value;
}
template<int A, int B>
constexpr Number<A+B>
operator+(Number<A>, Number<B> ){ return {}; }

template<class Lhs, class Rhs>
using Number_add=decltype(Lhs{}+Rhs{});

std::cout << Number_add< Number<3>, Number<4> >::value << std::end;