C++11 是否有方法检查是否在命名空间中定义了函数(名称和签名)

C++11 是否有方法检查是否在命名空间中定义了函数(名称和签名),c++11,C++11,我想在模板方法中调用一个名称空间定义的函数,并想使用std::enable_,以使该方法仅在目标名称空间定义的函数存在时生成。可能吗 我应该补充一点,调用方法接受一个在命名空间中定义了其类型的参数。这就是我要检查的名称空间 namespace SomeNamespace { ... void SomeFunc(...); class SomeType { ... }; } template <class T> void MyClass::MyMethod(

我想在模板方法中调用一个名称空间定义的函数,并想使用std::enable_,以使该方法仅在目标名称空间定义的函数存在时生成。可能吗

我应该补充一点,调用方法接受一个在命名空间中定义了其类型的参数。这就是我要检查的名称空间

namespace SomeNamespace
{
    ...
    void SomeFunc(...);

    class SomeType { ... };
}

template <class T>
void MyClass::MyMethod(const SomeNamespace::SomeType& obj)
{
   ...
   SomeNamespace::SomeFunc(...);
   ...
}
名称空间
{
...
void SomeFunc(…);
类SomeType{…};
}
模板
void MyClass::MyMethod(const SomeNamespace::SomeType&obj)
{
...
SomeNamespace::SomeFunc(…);
...
}

不确定是否可以使用
std::enable_if
执行此操作,但实现此操作的一种方法是以下方法(假设
func
使用一个参数,应该很容易推广到多个参数):

但是如果您注释掉
func
的定义,您会得到:

func does not exist

它有点笨重,因为需要在与
func
相同的命名空间中定义
call\u func
重载,否则它将无法工作。为了使其更易于重用,您可以使用
NS
func
参数将
call\u func
定义封装在某个宏中。

感谢您的建议。但我正在寻找一种可以处理任意名称空间的解决方案。不幸的是,在我的环境中使用宏不是一个选项。@simon,我认为那是不可能的。除了宏之外,该语言没有将命名空间名称用作参数(模板或其他)的方法。除非
SomeFunc
有一个与
SomeType
在某种程度上相关的参数,否则不能使用。您能澄清一下吗。当你对@toth说目标名称空间是任意的时,你的意思是你甚至不知道它的名称,还是你只是说它是一个给定的名称空间?@Mike Kinghan:在上面的帖子中,“我应该添加它…”下面的代码有SomeNamespace,这就是我指的名称空间。
func exists, calling it
func called with arg 2
func does not exist