我对 C++ 有点生疏,在使用 Python 一年后我要转行了。当然,我想将 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 https://stackoverflow.com/questions/130322/how-do-you-pass-a-member-function-pointer, 2 https://stackoverflow.com/questions/130322/how-do-you-pass-a-member-function-pointer,我想出了这个
typedef void (*vfc)(string str);
void printtime_inplace(string title, vfc func){
我尝试了这种结构,但这意味着我受到以下限制vfc
返回类型,在我的例子中是void
or string
,事实上我需要传递类的指针。
因此,我将必须执行 3 个函数来容纳不同的函数,即一个用于类成员函数的函数、一个用于 void 返回类型的函数和一个用于字符串返回类型的函数。
于是我问自己,这样的情况下我真的需要使用模板而不是写3次相同的函数吗?我真的对模板没有信心,但我应该做 3typedefs
并构造 printtime 函数来接受模板?此外,有没有一种方法可以告诉模板您只接受这些类型(即我定义的类型)?
还有一个问题,这是一个好的设计吗?或者你会建议其他设计吗?另一种实现?