C++;代码风格:SHA2算法 我在犹豫如何在C++中组织实现Saa2算法。
我之所以犹豫不决,是因为SHA2可以用4种方式实现,它们将产生4种不同的摘要大小(224、256、384和512位) 我正在考虑一个模板类,专门用于可以使用SHA2生成的摘要大小。然后问题是为非专业类编写什么。我能想到一些可能性:C++;代码风格:SHA2算法 我在犹豫如何在C++中组织实现Saa2算法。,c++,templates,coding-style,C++,Templates,Coding Style,我之所以犹豫不决,是因为SHA2可以用4种方式实现,它们将产生4种不同的摘要大小(224、256、384和512位) 我正在考虑一个模板类,专门用于可以使用SHA2生成的摘要大小。然后问题是为非专业类编写什么。我能想到一些可能性: //1 : throw exception on instantiation. template<size_t bits> class SHA2 : public HashAlgorithm<Bits,Bits>{ public: S
//1 : throw exception on instantiation.
template<size_t bits> class SHA2 : public HashAlgorithm<Bits,Bits>{
public:
SHA2(){
throw SHA2NotImplementedException(bits);
}
virtual ~SHA2() throw(){}
virtual Bits hash(const Bits& data)const = 0;
}
//2 : throw exception on use.
template<size_t bits> class SHA2 : public HashAlgorithm<Bits,Bits>{
public:
virtual ~SHA2() throw(){}
virtual Bits hash(const Bits& data)const{return SHA2NotImplementedException(bits);}
}
//3 : forbid instantiation and inheritance.
template<size_t bits> class SHA2 : public HashAlgorithm<Bits,Bits>{
private:
SHA2(){}
public:
virtual ~SHA2() throw(){}
virtual Bits hash(const Bits& data)const = 0;
}
//4 : forbid instantiation.
template<size_t bits> class SHA2 : public HashAlgorithm<Bits,Bits>{
public:
virtual ~SHA2() throw(){}
virtual Bits hash(const Bits& data)const = 0;
}
//5 : dummy return.
template<size_t bits> class SHA2 : public HashAlgorithm<Bits,Bits>{
public:
virtual ~SHA2() throw(){}
virtual Bits hash(const Bits& data)const{return Bits();}
}
//Write template specialization for bits = 224, 256, 384 and 512
//1:实例化时引发异常。
模板类SHA2:公共哈希算法{
公众:
SHA2(){
抛出SHA2NotImplementedException(位);
}
虚拟~SHA2()抛出(){}
虚拟位哈希(常量位和数据)常量=0;
}
//2:使用时引发异常。
模板类SHA2:公共哈希算法{
公众:
虚拟~SHA2()抛出(){}
虚拟位哈希(常量位和数据)常量{return SHA2NotImplementedException(Bits);}
}
//3:禁止实例化和继承。
模板类SHA2:公共哈希算法{
私人:
SHA2(){}
公众:
虚拟~SHA2()抛出(){}
虚拟位哈希(常量位和数据)常量=0;
}
//4:禁止实例化。
模板类SHA2:公共哈希算法{
公众:
虚拟~SHA2()抛出(){}
虚拟位哈希(常量位和数据)常量=0;
}
//5:虚拟返回。
模板类SHA2:公共哈希算法{
公众:
虚拟~SHA2()抛出(){}
虚拟位哈希(常量位和数据)常量{return Bits();}
}
//位=224、256、384和512的写入模板专门化
那么,你会写什么?哪个选项比其他选项更清晰?为什么
PS:我也可以只编写4个独立的算法,而不需要修改代码样式。只需将其完全保留为空(没有声明成员函数或变量)…为什么不呢?如果不使用非专用类,这是标准技术
模板实例化不必具有相同的接口:它们基本上是完全独立的类只需将其完全保留为空(没有声明成员函数或变量)…为什么不呢?如果不使用非专用类,这是标准技术
模板实例化不必具有相同的接口:它们基本上是完全独立的类如果使用模板参数,则该值必须在编译时可用。如果没有可能的实现,等待运行时标记错误似乎很愚蠢
因此,保留未指定的非专用模板,让它产生编译时错误。如果使用模板参数,则该值必须在编译时可用。如果没有可能的实现,等待运行时标记错误似乎很愚蠢 因此,保留未指定的非专用模板,让它产生编译时错误