1

是否有typedef等效于:

#define HashTabOf(i)    htab[i]

#define MAXCODE(n_bits) (((code_int) 1 << (n_bits)) - 1)

?

代码正在从C移植到 C++。

4

2 回答 2

4

不是typedef,而是c++的方式是:

template <typename T>
inline T &HashTabOf(size_t i)
{
    return htab[i];
}

inline size_t MAXCODE(size_t n_bits)
{
    return (1 << n_bits) - 1;
}
于 2012-04-21T12:48:21.040 回答
3

我会将@Dani 的模板解决方案实现为:

inline auto & HashTabOf(size_t i) -> decltype(htab[0])
{
    return htab[i];
}

它仅在 C++11 中有效。它使用了一个由 C++11 引入的名为trailing-return-type的特性。

这个解决方案的好处是它不再是一个模板。使用时无需提及T,而在@Dani 的解决方案中也必须提及T

auto item = HashTabOf<Type>(4); //Dani's solution 
auto item = HashTabOf(4);       //My solution

是的,你可以简单地这样写:

inline int & HashofTable(size_t i)
{ 
   return htab[i]; 
}

另外,为什么不htab[i]直接使用呢?

于 2012-04-21T12:50:21.410 回答