我发现自己需要一个模板类,它在编译时找到两个常量值的最大值; 这样的事情:
template<enum_t e1, enum_t e2>
struct max_of { static const enum_t value = SOMEHOW_MAX(e1, e2); };
Run Code Online (Sandbox Code Playgroud)
其中enum_t
是枚举类型,和max_of<x, y>::value
应等于最大的x
和y
.所以问题是:用什么代替SOMEHOW_MAX
?我不能使用c ++ 14的功能,所以它不能只是std::max
,因为它无法在编译时比较模板参数值.如果基数enum_t
相当小,一种可能的实现方式max_of
是通过模板特化,如下所示:
template<>
struct max_of<E_FIRST, E_SECOND> { static const enum_t value = E_SECOND; };
Run Code Online (Sandbox Code Playgroud)
这确实有效,但即使对于少数enum_t
价值观也显然变得相当冗长.有没有办法让模板系统以编程方式获取最大值?
在C++ 14中你应该使用std::max
.但是,如果C++ 14是禁止的,那么遵循简单的代码应该会有所帮助:
template<enum_t A, enum_t B>
struct max_of {
enum { value = A > B ? A : B};
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
619 次 |
最近记录: |