我正在使用一系列现有的测试,例如以下测试(其中有几百个):
bool Test_X(const char* file) {
...
}
它会被称为:
result = Test_X("TestData/test-set-X.bin");
问题出在make install
之后,TestData
已不在$PWD
中,因此测试程序失败并出现file not found
错误。
我想创建一个Locate
类,试图抽象出差异。为了使其具有微创性,我想使用它:
result = Test_X(Locate("TestData/test-set-X.bin"));
为了实现这一目标,我认为需要重载operator const char*
(以及一些朋友)。然而,这违反了规则:
例如,请参阅Stack Overflow上的这个问题/答案:Why does std::string not provide a conversion to const char*?。
问题变得有点复杂,因为测试需要在面对make PREFIX=/usr/local && sudo make install PREFIX=/usr/local
时起作用。所以我需要将make directory variables传播到C ++代码中。
过载是我唯一的选择,因此在这种情况下是必要的邪恶吗?或者我还缺少其他解决方案吗?
答案 0 :(得分:1)
功能对象好吗?
class Locate{
public:
Locate(const string& pwd):pwd(pwd){}
const char* operator()(const char* suffix){
string result=pwd+suffix;
return result.c_str();
}
private:
string pwd;
};
使用样本:
Locate locate("yourpwd");
Test_X(locate("TestData/test-set-X.bin")); #not Locate,it is locate