我应该在标签发送中使用未命名的临时标签或命名标签实例吗?

时间:2017-02-17 04:25:43

标签: c++ c++11 templates

在为标签分派实现标签提取时(在C ++ 11中),我是否更愿意使用未命名的临时标签实例或命名标签实例?

我要求进行最佳实践,"虽然利弊也很有用。我想最大限度地消除空临时标签实例的机会。我在某处读过,使用一个未命名的临时版可能有助于优化,但我不知道它在实践中是否重要。

这是两种形式的一个例子:

struct apple_fruit_tag {};
struct orange_fruit_tag {};

class SomeType {
 public:
    using fruit_category = apple_fruit_tag; 
};

namespace detail {
  template<typename T>
  void doSomething_(T x, apple_tag) { /* ... */ }
  template<typename T>
  void doSomething_(T x, orange_tag) { /* ... */ }
}

选项#1:输入别名,未命名的临时标记实例

这是使用here(crazycpp.wordpress.com)的表格。

template<typename T>
void doSomething(T x)
{
  using f_t = typename T::fruit_category;
  detail::doSomething_(x, f_t{});
}

选项#2:命名标记实例

这是使用here(boost.org)的表格。

template<typename T>
void doSomething(T x)
{
  typename T::fruit_category f;
  detail::doSomething_(x, f);
}

为了完整起见,这里有一个main()函数示例:

int main()
{
    SomeType x;
    doSomething(x);
}

0 个答案:

没有答案