如何快速连接char数组?

时间:2014-07-05 08:26:39

标签: c++

我在班上实施错误。我的意思是我为可能发生的各种误用创建错误消息。我知道如何通过std :: string或stringstream组合字符串和数字,但我想知道是否有更短的方法来执行它,这是括号运算符中的一个示例:

std::stringstream err;
err << "The key " << key << " is not set.";
throw std::invalid_argument(err.str());

我正在寻找适合这一行的东西:

throw std::invalid_argument("The key " + key + " is not set."); <- obviously broken

std :: invalid_argument将采用的任何格式都没问题。

2 个答案:

答案 0 :(得分:3)

只需使用std::to_string C ++ 11

throw std::invalid_argument("The key " + 
                             std::to_string( key ) + 
                            " is not set.");

答案 1 :(得分:1)

另一种解决方案是使用构造函数创建自己的异常类,该构造函数接受uint64_t并自行创建错误消息:

#include <sstream>
#include <stdexcept>
#include <exception>
#include <string>
#include <iostream>

class MyException : public std::invalid_argument
{
private:
    static std::string GetMessage(uint64_t key)
    {
        std::ostringstream err;
        err << "The key " << key << " is not set.";
        return err.str();
    }
public:
    MyException(uint64_t key) :
        std::invalid_argument(GetMessage(key).c_str()) {}
    virtual ~MyException() throw() {}
};

int main()
{
    try
    {
        throw MyException(123);
    }
    catch (std::exception const &exc)
    {
        std::cout << exc.what() << "\n";
    }
}