我在C++方面有些生疏,经过一年的Python编程后转而使用C++。自然地,我希望将从Python中学到的懒惰应用到C++中。
我刚刚发现了rot13算法,并对其感到兴奋。我找到了3种实现方式,并想做一个性能测试。我还想看看修改原字符串和创建新字符串之间是否有区别。因此,我最终编写了6个函数。
第一种方法中,我使用std::map映射字符,因此我构建了一个初始化该映射的类;第二种方法中,我使用三元运算符;第三种方法中,我使用位移运算符。
现在这些函数的原型如下:
// map dependent
void Rot13::convert_inplace(string& mystr){
string Rot13::convert(const string& mystr){
// ternary operator
void bitrot_inplace(string& mystr){
string bitrot(const string& mystr){
// bit shift
void bitshiftrot_inplace(string& mystr){
string bitshiftrot(const string& mystr){
我想构建一个函数,接受那些函数作为参数进行计算并打印结果。
所以我查看了stackoverflow上的1和2,然后得出以下代码。
typedef void (*vfc)(string str);
void printtime_inplace(string title, vfc func){
我尝试过这种构造方式,但这意味着我的
vfc
返回类型受到限制,而在我的情况下,它要么是void
,要么是string
,并且我需要传递类的指针。
因此,我将不得不编写3个函数来适应不同的函数,即一个用于类成员函数的函数,一个用于void返回类型的函数和一个用于string返回类型的函数。所以我问自己,这是我真的需要使用模板,以免写三次相同的函数吗?我对模板真的不太自信,但是我应该做三个
typedefs
并结构化printtime函数以接受模板吗?此外,有没有办法告诉模板您只接受这些类型(即我定义的类型)?还有一个问题,这是一个好的设计吗?或者您会建议其他设计?其他实现?
std::function
作为你的基准测试函数。 - FreakyyRot13::convert_inplace
是一个类成员函数。这是正确的吗? - NathanOliver