过载操作符const char *是否就地改装?

时间:2015-03-02 03:43:59

标签: c++ string class implicit-conversion

我正在使用一系列现有的测试,例如以下测试(其中有几百个):

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 ++代码中。

过载是我唯一的选择,因此在这种情况下是必要的邪恶吗?或者我还缺少其他解决方案吗?

1 个答案:

答案 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