我想使用模板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()
。