如何使用C++ 11使用关键字作为模板函数来删除范围中的命名空间

kei*_*ith 7 c++ c++11

我有一个模板功能:

namespace Example
{
template<class T>
T Foo() { return T(0); };
}
Run Code Online (Sandbox Code Playgroud)

我想使用一个using语句或类似的语句,以便在调用它时,我不必在函数名称前加上它的命名空间

template<class T> using Foo = Example::Foo<T>;
Run Code Online (Sandbox Code Playgroud)

但这不起作用.

并不想用下面的办法,因为这将包括一切形式的命名空间Example:

using namespace Example;
Run Code Online (Sandbox Code Playgroud)

有没有一个很好的C++ 11方法来为命名空间中的函数创建缩短的别名?

Vla*_*ill 4

至于任何符号,你都可以做using Example::Foo;。这可以在命名空间范围内使用,也可以在函数范围内使用(这实际上存在于 C++98 中,它在 C++11 中并不是新的)。您尝试执行的方法仅适用于类型,而它Foo是一个函数。

  • 不,事实并非如此,如果您想在类级别上对函数执行此操作,则必须定义包装函数:`template&lt; typename T &gt; static T Foo() { return Example::Foo(); }`。目前尚不清楚在类作用域中使用应该做什么,是否应该将函数导入为静态?从外面应该可以看到吗?另外,出于同样的原因,我建议您不要像我建议的那样使用包装器,只是为了方便,应该有充分的理由。 (2认同)