检查模板参数是否是引用 [C++03]
我想检查 C++03 中的模板参数是否为引用类型。 (我们在 C++11 和 Boost 中已经有了 is_reference)。 我利用了 SFINAE 以及我们无法拥有指向引用的指…
排除使用显式构造的 std::pair 构造函数
继 此答案,似乎这些构造函数: template pair(pair&& p); template pair(const pair& p); 在需要显式转换时被禁止参与重载决策。 从 C++11(第 20.3.…
是 C++ (03)SFINAE方面编译器独立吗?
我有一个头文件,其功能在很大程度上依赖于SFINAE的成功。在当前的 g++ 4.6 中,它按预期工作。我是否应该假设,我的代码对于所有编译器(C++03 编译…
SFINAE 尝试使用 bool 会给出编译器错误:“template argument ‘T::value”涉及模板参数”
我尝试使用 bool 实现 SFINAE(与流行的 void_ 技巧): template struct Resolve { static const bool value = false; }; template struct Resolve {…
SFINAE 中未继承类型以进行多重继承?
我正在使用 SFINAE 机制来推断类型。如果 class T 不包含 yes 并且被推导,则 Resolve::type 被推导为 T如果包含 yes,则为 MyClass。 class MyClass …
将类型解析为 class::typedef 的更短方法
我有几节课。目前它们由一个符号分隔。其中很少包含 type (typedef),也很少有不包含它。 struct A { ... public: typedef someclass type; } struc…
Boost MPL:仅当(成员)函数存在时才调用它
我有一个类 A,它有一个模板参数 T。在某些用例中,类 T 提供了函数 func1(),而在某些用例中,类 T 不提供该函数。 A 中的函数 f() 应该调用 func1()…
是否可以根据模板类型参数的嵌套 typedef 的存在来专门化模板定义?
我有一个模板, template ;类包装器,我想根据typename T::context_type的存在进行专门化。如果声明了 typename T::context_type,则包装器实例化的构…
从enable_if'd基继承
我试图部分专门化非字符数组的特征: template struct is_container : std::false_type {}; template struct is_container : std::enable_if::value, …
static_cast 的替换失败不是错误(SFINAE)问题
鉴于: class Hokey { public: explicit C(int i): i_(i) { } template T& render(T& t) { t = static_cast(i_); return t; } private: unsigned i_; …
为什么在尝试类成员指针时,SFINAE 技巧对非类类型不起作用?
出于好奇,我尝试了 is_class 使用 sizeof() 技巧构造。以下是代码: template struct is_class { typedef char (&yes)[7]; typedef char (&no)[3]; s…
为什么 SFINAE 会在它应该起作用的地方导致编译器错误?
我试图实现一个元程序,它可以查找给定的指针类型是否为 const 。即 is_const::value 应该是 false is_const::value 应该是 true 以下是代码: templa…
如何判断一个类是否包含子类/类型?
我们能否有一个 SFINAE 技巧来知道该类是否具有某些子类/类型。例如, template // searches for "my_type" struct has_inner_type { enum { value = …
如何检查operator==是否存在?
我正在尝试创建一个示例,它将检查 operator== (成员或非成员函数)是否存在。检查一个类是否有成员operator==很容易,但是如何检查它是否有非成员op…
如果原始源代码行无法编译,是否可以让模板选择备用源代码行?
我正在寻找一个相对通用的: 尝试编译这行代码, 如果成功,则编译并使用该行代码。否则 使用其他一些代码行 我有一个情况,我想根据提供的函子在 dou…