我正在尝试创建一个异常类。为此,我重载了<<运算符。所以代码是这样的

class RunAndCheck
{
     opearator << (boost::any given)
     {

         //Here goes the value of the    "given"

     }
};

用法是这样的
RunAndCheck s;
s << file->open() << __FILE__ << __LINE__ ;

所以问题是我想知道 FILE 的类型,然后只有我才能从boost::any中提取字符串。有人可以唤起您对此的好奇心吗?

最佳答案

__FILE__扩展为字符串文字,就像您直接编写“/path/to/current/file.cpp”一样。字符串文字是不可修改的char数组左值。

您想要模板化<

class RunAndCheck {
public:
    template<class T>
    RunAndCheck& operator<<(const T& value) {
        // ...
        return *this;
    }
};

或者您想为所有可接受的类型提供重载:
class RunAndCheck {
public:
    RunAndCheck& operator<<(const char* value) {
        // ...
        return *this;
    }
    RunAndCheck& operator<<(int value) {
        // ...
        return *this;
    }
};

关于C++ __FILE__宏的类型是什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5065091/

10-12 17:44