c++ - 使用专门的模板并命名枚举选项

标签 c++ templates c++11 enums

我通过枚举专门化了一个模板

template<>
class specialized_class<user_option=CHOICE_ENUM::CHOSEN_OPTION>
{

public:

    typedef second_class<user_option> obj_type;

在这里,为了定义second_class,我需要知道用户选择了什么类型。我需要命名所选的选项。但是我的代码的第二行是非法语法。如何做我需要的?

虽然

    typedef second_class<CHOICE_ENUM::CHOSEN_OPTION> obj_type;

解决问题。我宁愿避免这种方式,因为它使用的是魔术类型,并且类中的代码需要修改才能在其他地方使用。

最佳答案

如果您正在尝试减少特化中 CHOICE_ENUM::CHOSEN_OPTION 的出现。也许以下内容就足够了。

enum Enum
{
    E1,
    E2
};

template<Enum E>
class Foo
{
};

template<Enum E>
class Bar
{
};

template<>
class Foo<E2> // 1 occurrence to change if copy/pasted for a new specialization
{
public:
    static const Enum enum_value = E2; // Last occurrence to change

    typedef Bar<enum_value> obj_type;
};

关于c++ - 使用专门的模板并命名枚举选项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29666703/

相关文章:

c++ - 将字符串移出 std::ostringstream

C 代码和它的 C++ 翻译初始化不同

c++ - 这两个 C++ 初始化器语法在语义上是否有所不同?

java - JSF 2 : How build components correctly?

c++ - 在奇怪的二叉树中搜索节点

C++ 模板类中的非法成员初始化

c++ - clang 与 gcc 和 msvc 中方法指针的模板

C++ 使用以 vector 作为值的 map

c++ - C++中反向打印链表

c++ - 如何将 PDF 文档的所有页面向右移动一英寸?