3
我試圖根據應用於函數的屬性來實現不同的行爲。基本上我試圖看看是否有可能在編譯時測試屬性的存在。是否可以在C++中測試屬性說明符?
struct AbortError
{
[[noreturn]] static void error(const std::string& msg)
{
std::cerr << "critical error: " << msg << std::endl;
std::abort();
}
}
struct LogError
{
static void error(const std::string& msg)
{
std::cerr << "non-critical error: " << msg << std::endl;
}
}
是否可以測試[[noreturn]]的存在?
我希望能像acheive
template <typename ErrorPolicy>
void function()
{
// ...
if constexpr(std::is_noreturn<ErrorPolicy::error>::value)
{
performCriticalCleanup();
}
ErrorPolicy::error("Bad things happened.");
}
屬性不是簽名的一部分,並且C++沒有反射... – Jarod42