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