c++ - 无论类型如何,如何从模板类的方法返回 std::string?
问题描述
我正忙着解决我认为应该很容易做的事情。我有一个模板类,看起来像这样(有其他代码,加载值等)。我关心的工作类型是 char、int、bool 和 std::string。
template <typename T>
class MyVector
{
public:
std::string get()
{
return m_vector[m_current_index]; // 1
return std::to_string(m_vector[m_current_index]); // 2
// 3
if constexpr (!std::is_same_v<T, std::string>) {
return std::to_string(m_vector[m_current_index]);
}
return m_vector[m_current_index];
}
private:
std::vector<T> m_vector;
int m_current_index{-1};
};
对于不是 std::string 的任何类型名 T,上面的选项 (1) 都会失败。
选项 (2) 适用于除std::string 之外的任何类型名 T
选项 (3) 似乎没有在编译时得到实际处理(与选项 (1) 的情况相同的错误发生)
解决方案
几乎在我发布的同时,答案突然出现在我身上……但也许这对将来的其他人有帮助!
if constexpr (!std::is_same_v<T, std::string>) {
return std::to_string(m_vector[m_current_index]);
} else {
return m_vector[m_current_index];
}
编译器不够聪明,无法忽略“else”的情况,除非它专门在“else”块中。
推荐阅读
- php - Laravel 7 通知和 AJAX:方法 markAsRead() 不会在返回时更新结果
- python - “OSError: Model name './XX' was not found in tokenizers model name list” - 无法在 Transformers 中加载自定义标记器
- azure - 向卷挂载添加机密时 Base64 无效
- google-cloud-platform - GCP 中的 Burstable 实例是什么?
- python - 在 Openrefire 中为 Python 执行选择 Python 环境
- singularity-container - 让 Singularity Compose 工作的问题
- python - 如何通过python格式化url中的字符串?
- python - 使用 Boto3 以编程方式获取 IAM 用户的 UserID
- php - 如何在PHP中的图片上写不透明的文本?
- python - NameError:名称“max_pool2D”未定义