gpt4 book ai didi

c++ - 在处理任何字符大小的模板中使用字符串文字

转载 作者:太空狗 更新时间:2023-10-29 22:55:23 25 4
gpt4 key购买 nike

让我们考虑这种模板:

template<typename CharT>
std::basic_string<CharT> refEnvVaraiable(const std::basic_string<CharT> &varaibleName)
{
std::basic_string<CharT> result;
result.reserve(varaibleName.length() + 3);
result = "${" + varaibleName + "}";
return result;
}

计划是假设它可以处理任何字符大小的字符串。如果参数函数参数是 std::wstring,这当然不会编译,因为没有运算符将它与 const char[] 类型的字符串文字连接。

如何强制字符串文字匹配所需的字符类型?我是否必须为表示文字的常量提供特化(这么多样板代码)?或者有现成的工具吗?

Live sample

最佳答案

您可以做的一件事是利用 if constexpr对您要支持的不同连接进行编码。当代码被编译时,只有有效的连接会被编译,其余的将被丢弃。那会给你类似的东西

template<typename CharT>
std::basic_string<CharT> refEnvVaraiable(const std::basic_string<CharT> &varaibleName)
{
std::basic_string<CharT> result;
result.reserve(varaibleName.length() + 3);
if constexpr (std::is_same_v<CharT, char>) result = "${" + varaibleName + "}";
else if constexpr (std::is_same_v<CharT, wchar_t>) result = L"${" + varaibleName + L"}";
else if constexpr (std::is_same_v<CharT, char16_t>) result = u"${" + varaibleName + u"}";
else if constexpr (std::is_same_v<CharT, char32_t>) result = U"${" + varaibleName + U"}";
else static_assert(false, "refEnvVaraiable called with unsupported character type");
return result;
}

关于c++ - 在处理任何字符大小的模板中使用字符串文字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52424262/

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