headerfile.h
#define NBIT 128
#define DATASIZE 34
#define STR_HELPER(x) #x
#define STR(x) STR_HELPER(x)
template <unsigned int POWER>
class xzcMutatorECB128
{
#define POWERLIMINT (NBIT * DATASIZE * 0.7)
#define MSG2 "xzcMutatorECB128<POWER>; error template parametr: POWER; maximum="STR(POWERLIMINT)"; [en]: Key exceeded the limit;"
static_assert(!(POWER > POWERLIMINT), MSG2);
public:
xzcMutatorECB128();
}
的main.cpp
#include "headerfile.h"
int main(int argc, char *argv[])
{
xzcMutatorECB128<3400> xzc128e;
}
错误:C2338:xzcMutatorECB128&lt; POWER&gt ;;错误模板参数:POWER;最大=(128 * 34 * 0.7); [en]:密钥超出限制;
错误:C2338:xzcMutatorECB128&lt; POWER&gt ;;错误模板参数:POWER;最大= 3046; [en]:密钥超出限制;
NBIT和DATASIZE将改变
答案 0 :(得分:0)
这在标准C ++中是不可能的。
预处理程序指令,例如
[Jaguar/Panthera]
和
#define
字符串化运算符 - 它们在编译的预处理阶段执行。执行“#”字符串化运算符,并在预处理阶段将其参数替换为字符串化版本。
直到稍后的编译阶段才会进行编译和优化。当编译器查看生成的代码时,参数已经被字符串化。
答案 1 :(得分:0)
模板类xzcMutatorECB128的定义是错误的。如果要定义模板类,可能在编译时不知道它的数据类型。另一方面,班级中的数据或功能应该是公共的或私人的或受保护的。