枚举模板专精

是否可以专门为枚举模板化方法?枚举模板专精

喜欢的东西(以下无效代码):

template <typename T> 

void f(T value);

template <>

void f<enum T>(T value);

在这是不可能的话,那么假设我有专业化的多种类型,如intunsigned intlong longunsigned long long,等等,然后枚举值将使用哪些专门化?

回答:

您可以使用std::enable_ifstd::is_enum来自<type_traits>来完成此操作。

In an answer to one of my questions,litb发布了关于如何使用Boost等价物可以完成的详细和详细的说明。

回答:

我不知道如果我正确地理解你的问题,但你可以实例化具体枚举模板:

template <typename T> 

void f(T value);

enum cars { ford, volvo, saab, subaru, toyota };

enum colors { red, black, green, blue };

template <>

void f<cars>(cars) { }

template <>

void f<colors>(colors) { }

int main() {

f(ford);

f(red);

}

回答:

想必,你可以用一个类型,他们唯一的事情你做的唯一有趣的事情知道它是一个枚举,将它投射到它的基本类型并对其进行操作。以下是如何可能的样子,用詹姆斯的建议的方法(AKA SFINAE):

void Bar(int b); // and/or other underlying types 

template<typename T>

typename std::enable_if<std::is_enum<T>::value, void>::type

Foo(T enm)

{

Bar(static_cast<typename std::underlying_type<T>::type>(enm));

}

作为一个相关的奖金,这里有一个类似的方法,只会得到解决特定类型的选择的(在is_same替换布尔您选择的类型):

template<typename T> 

typename std::enable_if<std::is_same<T,bool>::value, void>::type

Baz(T bl)

{

if (bl)

{

//...

}

else

{

//...

}

}

以上是 枚举模板专精 的全部内容, 来源链接: utcz.com/qa/265459.html

回到顶部