如何使用enable_if根据类的模板参数启用成员函数
在代码中: template struct is_builtin { enum {value = 0}; }; template<> struct is_builtin { enum {value = 1}; }; template<> struct is_builti…
为什么以下 SFINAE 测试无法检测到模板成员函数?
使用 GCC 进行编译时,我从以下代码中得到的总是 false。我相信这是一个编译器错误,但有人可能更了解。 #include template class has_apply { typede…
如果模板类型是可实例化的,则执行某些操作
如果我可以实例化某个模板类,我想使用 SFINAE 模式来执行一些代码。让我们想象一下: //Only instantiable with types T for which T.x() is ok: tem…
为什么类模板的成员函数声明都应该是格式良好的?
好的,假设我想检查模板参数是否有嵌套类型/typedef XYZ。 template struct hasXZY { typedef char no; typedef struct { char x[2]; } yes; template…
使用 sfinae 测试命名空间成员是否存在
我试图弄清楚是否可以使用 sfinae 来测试 命名空间 成员的存在。 谷歌对此保持沉默。我尝试过以下代码,但失败了。 namespace xyz{ struct abc{}; } s…
解释一下 C++ SFINAE 到非 C++程序员
C++ 中的 SFINAE 是什么? 您能用不懂 C++ 的程序员可以理解的语言解释一下吗?另外,SFINAE 对应于 Python 这样的语言中的什么概念?…
boost::enable_if 类模板方法
我得到了带有模板方法的类,它查看了这个: struct undefined {}; template struct is_undefined : mpl::false_ {}; template : mpl::true_ {}; templ…
部分模板特化:匹配特化模板参数的属性
template class A { // Use Y::Q, a useful property, not used for specialization. }; enum Property {P1,P2}; template class B {}; class C {}; …
检测类是否具有重载函数在 Comeau 编译器上失败
我正在尝试使用 SFINAE 来检测类是否具有采用某种类型的重载成员函数。我的代码似乎可以在 Visual Studio 和 GCC 中正常工作,但无法使用 Comeau 在线…
SFINAE 因枚举模板参数而失败
有人可以解释以下行为(我正在使用 Visual Studio 2010)。 标题: #pragma once #include using boost::enable_if_c; enum WeekDay {MONDAY, TUESDAY…
为什么 SFINAE 不适用于此?
我在尝试 Visual Studio 10(Beta 2)时编写了一些简单的点代码,并且在我希望 SFINAE 启动的地方遇到了这段代码,但似乎没有: template struct poin…
如果模板化函数存在,如何调用它,否则如何调用其他函数?
我想做一些事情,就像 template void foo(const T& t) { IF bar(t) would compile bar(t); ELSE baz(t); } 我认为使用 enable_if 可以完成这里的工作…