【发布时间】:2014-09-22 17:42:30
【问题描述】:
以下是有效的c++:
template <typename BAR, int BAZ>
Foo<BAR, BAZ> & operator -= ( Foo<BAR, BAZ> & left, Foo<BAR, BAZ> const right )
{
using reference = Foo<BAR, BAZ> &;
using const_value = Foo<BAR, BAZ> const;
...
return left;
}
但Foo<BAR, BAZ> 实际上可能是一个相当长的标识符,我希望以某种方式将 using 语句应用于函数定义以及内容,如果只是为了美观和清晰。基本上,是否可以编写类似于以下内容作为独立功能?
template <typename BAR, int BAZ>
... // using/typedef statements that define 'reference' and 'const_value',
... // but only defines them for this function
reference operator -= ( reference left, const_value right )
{
...
return left;
}
【问题讨论】:
-
您可以使用类型函数 (C++98) 或返回类型推导 (C++14)。您还可以在某些命名空间中隐藏这些 using 语句,在那里定义您的函数,并通过
decltype使用 C++11 样式的返回类型“推论”在外部提供一个包装器。 -
"Foo
实际上可能是一个相当长的标识符",但您可以通过键入 BAR 和 BAZ 来使其更短(并且更易于理解)。 -
@dyp 好主意,但是命名空间外的函数包装器的参数是否也需要使用 Foo
声明? -
啊,我没有仔细检查你的例子。使用此技术无法轻松摆脱函数参数类型。类型函数仍然可以正常工作。
-
#define 和 #undef? ;)
标签: c++ templates typedef using