在为标签分派实现标签提取时(在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);
}