如何根据模板类型分配静态 constexpr 字段值

问题描述 投票:0回答:1

我想根据模板类型分配类的静态 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;
}

c++ boost c++14 metaprogramming template-meta-programming
1个回答
1
投票

你可以写一个特质

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
来返回给定类型的正确字符串的函数。

© www.soinside.com 2019 - 2024. All rights reserved.