我想根据模板类型分配类的静态 constexpr 字段。 我找到了下面的解决方案,但我想这不是最好的解决方案,特别是如果有其他类型需要支持的话。也许某种 constexpr 映射? (我可以使用STL和/或boost)
#include <iostream>
#include <string_view>
template <typename T>
struct Example
{
static constexpr std::string_view s{std::is_same_v<T, int> ? "int"
: (std::is_same_v<T, double> ? "double" : "other")};
};
int main()
{
const Example<int> example;
std::cout << example.s << std::endl;
return 0;
}
你可以写一个特质
template <typename T>
struct st { };
并相应地专业化:
template <> struct st<int> { static constexpr std::string_view value{"int"}; }
// ... other types
然后使用它:
template <typename T>
struct Example
{
static constexpr std::string_view s = st<T>::value;
};
更“现代”的方法是使用一系列
constexpr if
来返回给定类型的正确字符串的函数。