在过去的几个小时里,我一直在努力解决非常奇怪的问题(在我刚接触SFINAE并解决了5-6个其他问题之后)。基本上,在以下代码中,我希望可以f()
处理所有可能的模板实例化,但是g()
仅在N == 2
以下情况下可用:
#include <type_traits>
#include <iostream>
template<typename T, int N>
class A
{
public:
void f(void);
void g(void);
};
template<typename T, int N>
inline void A<T, N>::f()
{
std::cout << "f()\n";
}
template<typename T, int N, typename std::enable_if<N == 2, void>::type* = nullptr>
inline void A<T, N>::g()
{
std::cout << "g()\n";
}
int main(int argc, char *argv[])
{
A<float, 2> obj;
obj.f();
obj.g();
return 0;
}
Run Code Online (Sandbox Code Playgroud)
当我尝试对其进行编译时,我得到一个关于3个模板参数而不是2个模板参数的错误。然后,经过一番尝试,我决定将g()
内部的定义移到其A
自身的定义内,如下所示:
#include <type_traits> …
Run Code Online (Sandbox Code Playgroud) 免责声明:我已经阅读了关于这个主题的无数其他文章,但我仍然没有得到它们.示例:为什么这样做:
void func(int a, void (*callback)(int))
{
/* do something with a and callback */
callback(3);
}
void pointme(int b)
{
/* do something with b */
}
int main()
{
void (*pf)(int);
pf = &pointme;
func(10, pf);
}
Run Code Online (Sandbox Code Playgroud)
当我可以简单地这样做:
void func(int a)
{
pointme(3);
/* do something with a*/
}
void pointme(int b)
{
/* do something with b */
}
int main()
{
func(10);
}
Run Code Online (Sandbox Code Playgroud)
??? 我真的不明白.任何帮助都会受到超级赞赏.谢谢!!!