gpt4 book ai didi

c++ - 试图使我的枚举等同于 std::error_code

转载 作者:行者123 更新时间:2023-11-28 05:01:21 27 4
gpt4 key购买 nike

我是 still通过 std::error_code 并且我现在试图使我的错误枚举列表等同于 std::error_code。我正在关注 this 上的内容教程,但由于某种原因我无法让它工作,我总是以错误结束 No viable conversion from 'my_project::my_error' to 'std::error_code'

这就是我正在使用的:

#include <system_error>
#include <string>

namespace std {

enum class my_error;

template <>
struct is_error_condition_enum<my_error> : public true_type {};
}

namespace my_project {
enum class my_error {
warning = 45836431
};

namespace internal {
struct my_error_category : public std::error_category {
const char* name() const noexcept override {
return "AAA";
}
std::string message(int ev) const noexcept override {
const std::string message = "BBB";
return message;
}
};
}
}

inline std::error_code make_error_code(const my_project::my_error &e) {
return {static_cast<int>(e), my_project::internal::my_error_category()};
};

int main()
{
std::error_code ec = my_project::my_error::warning;
}

最佳答案

这个有效:

#include <system_error>
#include <string>

namespace my_project {
enum class my_error {
warning = 45836431
};
}

namespace std {
// you had a typo here, and you defined a different std::my_error class
template <>
struct is_error_code_enum<my_project::my_error> : public true_type {};
}

namespace my_project {

namespace internal {
struct my_error_category : public std::error_category {
const char* name() const noexcept override {
return "AAA";
}
std::string message(int ev) const noexcept override {
const std::string message = "BBB";
return message;
}
};
}

inline std::error_code make_error_code(const my_project::my_error &e) {
return {static_cast<int>(e), my_project::internal::my_error_category()};
};
}

int main()
{
std::error_code ec = my_project::my_error::warning;
}

Clang 的错误消息让我走上了正确的轨道,因为它告诉我为什么它没有使用正确的构造函数。

关于c++ - 试图使我的枚举等同于 std::error_code,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45866068/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com