1

我想使用模板C++函数匹配某些数据类型,如果没有constexpr匹配的情况,我想导致编译错误:

template<typename ValueType>
void match_data_type() {
    if constexpr (std::is_same_v<ValueType, bool>) {
        std::cout << "bool" << std::endl;
    } else if constexpr (std::is_same_v<ValueType, const char *>) {
        std::cout << "const char *" << std::endl;
    } else if constexpr (std::is_same_v<ValueType, std::string>) {
        std::cout << "std::string" << std::endl;
    } else {
        std::cout << "Not matched!" << std::endl;
        // static_assert(false, "Unhandled data type");
    }
}

示例用法:

match_data_type<bool>();
match_data_type<char *>();
match_data_type<std::string>();
match_data_type<std::stringstream>();

输出:

bool
const char *
std::string
Not matched!

不匹配的数据类型情况是否可能导致编译错误,如果是,如何实现?static_assert不起作用,因为它总是生效,无论它放在代码中的什么位置(例如,取消注释上面的行总是会导致断言错误,无论上下文如何)。请注意,我不想抛出异常,而是完全阻止传递未处理的数据类型match_data_type()

4

0 回答 0