我想知道我想实现的目标是否可以在C++中实现

假设我有一个模板

template<typename T>
struct Foo {
    static void foo();
};

和非constexpr char c
现在,我想创建一个Foo实例并对其进行一些处理,具体取决于我角色的值:
if (c == 'i')
    Foo<int>::foo();
else if (c == 'f')
    Foo<float>::foo();
....

有没有更优雅的方式做到这一点?我当时想写一个char trait,像这样:
template<char c>
struct char_trait {};

template<>
struct char_trait<'i'> {
    using type = int;
};

但是由于c是非constexpr的,所以这没有多大意义。

我将不胜感激

最佳答案

the comment中所述,模板(特征)版本不适用于运行时评估。

您可以避免长if() {} else if()级联的方法是在 map 中整理内容:

std::map<char,std::function<void ()>> foo_calls {
    { 'i', Foo<int>::foo } ,
    { 'f', Foo<float>::foo } ,
    // ...
};

和使用
auto it = foo_calls.find(c);
if(it != foo_calls.end) {
    (it->second)();
}

关于c++ - 字符到类型的非constexpr转换,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40809541/

10-09 20:58