相关疑难解决方法(0)

您使用C++中的哪种Typesafe枚举?

众所周知,C++中的内置枚举不是类型安全的.我想知道实现类型安全枚举的哪些类在那里使用...我自己使用以下"自行车",但它有点冗长和有限:

typesafeenum.h:

struct TypesafeEnum
{
// Construction:
public:
    TypesafeEnum(): id (next_id++), name("") {}
    TypesafeEnum(const std::string& n): id(next_id++), name(n) {}

// Operations:
public:
    bool operator == (const TypesafeEnum& right) const;
    bool operator != (const TypesafeEnum& right) const;
    bool operator < (const TypesafeEnum& right) const;

    std::string to_string() const { return name; }

// Implementation:
private:
    static int next_id;
    int id;
    std::string name;
};
Run Code Online (Sandbox Code Playgroud)

typesafeenum.cpp:

int TypesafeEnum::next_id = 1;

bool TypesafeEnum::operator== (const TypesafeEnum& right) const 
{ return id == right.id; }

bool TypesafeEnum::operator!= …
Run Code Online (Sandbox Code Playgroud)

enums design-patterns enumeration type-safety c++03

44
推荐指数
4
解决办法
2万
查看次数

如何检查类型是否是给定类模板的实例化?

是否可以检查类型是否是特定模板的实例化?

我有一个类模板,其中一个模板参数必须是特定模板的实例化,或其他类型.例如,考虑一个类型列表的简单定义:

struct null_type;

template <typename Head, typename Tail>
struct typelist
{
    // Tail must be a typelist or null_type

    typedef Head head;
    typedef Tail tail;
};
Run Code Online (Sandbox Code Playgroud)

现在,我想,以确保规定的类型Tail模板参数始终为的一个实例typelistnull_type.我可以使用部分特化来仅为这些情况定义模板,如下所示:

template <typename Head, typename Tail>
struct typelist; // default, not defined

template <typename Head, typename H, typename T>
struct typelist< Head, typelist<H,T> > // Tail = typelist, ok
{
    typedef Head head;
    typedef typelist<H,T> tail;
};

template <typename Head>
struct typelist< Head, null_type > // Tail …
Run Code Online (Sandbox Code Playgroud)

c++ templates template-meta-programming

13
推荐指数
1
解决办法
3219
查看次数