1

我有很多这样的代码:

otherString1 = myString1.replace("a", "b").replace("c", "d").replace("e", "f");
otherString2 = myString2.replace("a", "b").replace("c", "d").replace("e", "f");
otherString3 = myString3.replace("a", "b").replace("c", "d").replace("e", "f");

我不想replace一次又一次地重复这些方法。重构此类代码的正确方法是什么?我是 C++ 新手...

我以为我可以这样做:

#define REPLACE .replace("a", "b").replace("c", "d").replace("e", "f")
otherString1 = myString1#REPLACE;

但这不起作用。

我显然不能猴子修补字符串类来添加myReplace()......

该怎么办?我应该将替换代码放入头文件还是源文件?那些static, inline,const东西呢?我应该创建一个完整的辅助类和一个辅助方法,还是应该只在某个地方创建一个函数?怎么样的东西:

[helper.hpp]
static inline const myReplace(const StringClass s);

[helper.cpp]
static inline const myReplace(const StringClass s) {
    return s.replace("a", "b").replace("c", "d").replace("e", "f");
}

[somefile.cpp]
include "helper.hpp"
otherString3 = myReplace(myString3);
4

2 回答 2

5

IMO,你想多了。只需创建一个接受字符串(通过const引用)并返回修改后的字符串的函数。在头文件中声明并在相应的.cpp文件中定义。

任务完成。

[helper.hpp]
std::string myReplace(const std::string& s);

[helper.cpp]
std::string myReplace(const std::string& s) {
   ...
}

[somefile.cpp]
#include "helper.hpp"
otherString3 = myReplace(myString3);
于 2013-03-23T15:15:26.073 回答
1

我只想指出您的宏会起作用,只是您使用不正确。但是,这不是解决这个问题的正确方法,只是想指出这一点。这是正确的用法:

#define REPLACE .replace("a", "b").replace("c", "d").replace("e", "f")
otherString1 = myString1 REPLACE;

或者可能更好(如果使用宏可以更好):

#define REPLACE(str) str.replace("a", "b").replace("c", "d").replace("e", "f")
otherString1 = REPLACE(myString1);

请记住,不要这样做,但这是可以使用宏的方式。

于 2013-03-23T15:24:06.207 回答