我想基于std :: exception创建一个异常类,它允许我使用内置宏(至少Visual Studio包含它们)来提供文件,函数和行号。
因为编写这些内容很繁琐,我做了一个简单的#define来完成它:
#define SOURCE __FILE__, __FUNCTION__, __LINE__
有没有办法可以在不使用宏的情况下实现相同的效果,使符号保留在Exceptions :: namespace中?我不太喜欢污染全球。
以下是对任何感兴趣的人的回购:
#include <iostream>
#include <exception>
namespace Exceptions
{
class ExceptionBase : public std::exception
{
public:
explicit ExceptionBase() :
Line(0), File(nullptr), Function(nullptr) {}
explicit ExceptionBase(std::exception const & exception) :
std::exception(exception), Line(0), File(nullptr), Function(nullptr) {}
explicit ExceptionBase(char const * file, char const * function, unsigned line) :
File(file), Function(function), Line(line) {}
explicit ExceptionBase(char const * message, char const * file, char const * function, unsigned line) :
std::exception(message), File(file), Function(function), Line(line) {}
~ExceptionBase() {}
unsigned Line;
const char *File, *Function;
};
}
#define SOURCE __FILE__, __FUNCTION__, __LINE__
int main(void)
{
try
{
throw Exceptions::ExceptionBase(SOURCE);
}
catch(Exceptions::ExceptionBase const & base)
{
std::cout << "File: " << base.File << std::endl;
std::cout << "Function: " << base.Function << std::endl;
std::cout << "Line: " << base.Line << std::endl;
}
}