模板元编程,简历资格错误中的冲突
Template metaprogramming, conflicts in cv-qualification error
我正在尝试使用模板元编程实现一个正弦函数。但是,由于简历资格的冲突,我收到错误"radtest"不是双重的有效模板参数。这是代码:
#include <iostream>
using namespace std;
template <double&, int, int> struct
Series;
template <double& rad> struct Sine
{
enum
{
maxterms=10
};
static inline double sin()
{
return (rad) *
Series<(rad), 0, maxterms>::val();
}
};
template <double& rad, int i, int
maxterms> struct Series
{
enum
{
cont = i+1 != maxterms,
nxt1 = (i+1)*cont,
nxtmax = maxterms*cont
};
// uses recursive definition of
// Sine
// sin(x)=x*term(0)
// term(n)=1-
// x*x/(2*n+2)/(2*n+3)*term(n+1)
static inline double val()
{
return 1 - (rad)*
(rad)/(2.0*i+2.0)/(2.0*i+3.0)
* Series<rad * cont, nxt1,
nxtmax>::val();
}
};
#define SineT(rad) Sine<rad>::sin()
constexpr double radtest=0.707;
int main()
{
cout << "Sine of " << radtest
<< " is: " << SineT(radtest);
return 0;
}
可能是什么问题?提前谢谢。
问题是radtest
是const
的(由constexpr
暗示),所以你不能让sine
double&
参数绑定到它。
如果您尝试使其double radtest
(不是constexpr),或者如果您尝试将所有模板参数const double&
则会遇到另一个问题:无法将临时绑定到引用非类型模板参数。这是标准明确不允许的:
§ 14.3.2 模板非类型参数
非类型模板参数的模板参数应为转换后的常量表达式 (5.20) 的类型为 模板参数。对于引用的非类型模板参数或指针类型,常量表达式的值不得引用 to(或对于指针类型,不应是以下地址):
- 。
- (1.2) 临时对象 (12.2),
- 。
我个人看不到摆脱这种混乱的方法。这(使用引用作为模板非类型参数)实际上突破了C++模板系统可以执行的操作的界限。
我能推荐的是创建一个constexpr
罪函数。
相关文章:
- 错误:使用通用引用的声明冲突
- 0xC0000005:访问冲突写入位置0xCDCDCDCD动态分配错误
- C++ 概念 - 需要括号中的概念会导致 2 条冲突的错误消息
- 使用 EvtSetChannelConfigProperty() 函数时出现访问冲突错误
- 引发异常:读取访问冲突.**此**0x40错误
- 在尝试使用CUDA分配内存时,我遇到了访问冲突写入位置错误
- cv::resize() 失败并出现访问冲突错误(由 NULL> 处的 <struct 引起)
- 在 C 代码中调用 Python 函数时第三次出现访问冲突写入位置错误
- 错误:使用 tesseract 引擎时 C++ 中的声明'typedef struct tagBLOB BLOB'冲突
- 具有相同名称的方法和内部类(错误:.. 与前面的声明冲突)
- 错误 : 异常 : 引发未处理的异常: 读取访问冲突.0xDDDDDDDD临时温度
- 读取访问冲突. _Mycont 在 C++ 中将 udp 数据放入向量时出现 nullptr 错误
- 将 std::string 作为参数从一个 DLL 传递到另一个 DLL 引发访问冲突错误
- 遵循官方 Direct2D 示例,但出现访问冲突错误
- 分段冲突 分子数组中值的分段错误 c++
- Windows错误:异常:使用从C++到Python的ctypes创建DLL时出现访问冲突或Windows错误193
- 完美的转发功能推断出冲突错误
- 致命错误LNK1112:在 npm 安装期间,模块计算机类型'X86'与目标计算机类型'x64'冲突
- C++编译错误是由于使用 std::move 时运动构造函数与其他非运动构造函数之间的冲突
- C++可能存在写入位置的构造函数错误冲突