如果类型/类有字段,则选择模板方法
假设我有以下两种类型: enum class TypeA { //... }; class TypeB { public: using _type = unsigned int; constexpr _type to_type(); //... }; 我…
C++模板参数仅限于类(非基本类型)
是否可以指定一个永远不会与基本类型(例如 int)匹配的模板参数?我正在大力对抗歧义。例如: template void Function(const T& x) { SetString(x.Ge…
为什么具有相同名称和参数类型检查的函数不能共存?
我希望下面的 2 个定义能够共存,因为我添加了类型检查代码,但它给出了已经声明的错误。为什么会这样以及需要改变什么? #include #include template…
静态类特征的条件执行路径
在尝试实现现有 API 的新 API 替代方案时,我无法找到适当的解决方案,但我仍然希望支持向后兼容性; 让这是我的旧API: typedef int[3] Node; templa…
为什么SFINAE在函数重载时报告错误
以下代码无法编译,我只想测试SFINAE,为什么无法编译? #include template class TestVoid { template> * = nullptr> void func() { std::cout << "v…
为什么 SFINAE 无法检测 MSVC 上的 constexpr?
我编写了以下编译时检查来检测 size 方法是否为 constexpr。遗憾的是这并没有按预期工作。它为 std::vector 返回 true。我认为用 size 的结果实例化 s…
如何为模板化的operator()编写最好的is_callable特征
我有这样定义的 is_callable 特征: #ifndef IS_CALLABLE_HPP #define IS_CALLABLE_HPP #include namespace is_callable_detail { struct no {}; stru…
is_container 特征在 std::set SFINAE 问题上失败
我正在尝试为 std 容器编写一个流运算符,主要是为了调试的目的。 我有以下代码: #include #include #include #include #include #include #include …
这个 has_member 类模板如何工作?
我试图了解以下类模板的工作原理(取自 此处),但我无法正确理解它: template class has_member { class yes { char m;}; class no { yes m[2];}; s…
模板重载和 SFINAE 仅适用于函数而不适用于类
有人可以解释为什么编译器只接受这个代码 template::type =0> void a_function(){} template::type =0> void a_function(){} 而不接受这个: template…
SFINAE 用于测试另一个命名空间中的自由函数
我试图想出一个 hack 来测试 std::isnan 是否在预处理器中没有特殊大小写编译器的情况下定义,并提出了以下内容,我希望它能正常工作。 #include #inc…
不应该定义的enable_if函数
作为一个实验,我试图创建一个没有参数的 void 成员函数,根据类模板参数更改行为: #include #include template class MyClass { public: void MyFun…
boost::enable_if 不在函数签名中
这只是一个关于风格的问题:我不喜欢 C++ 的模板元编程方式,它要求您使用返回类型或为 SFINAE 的技巧添加额外的虚拟参数。所以,我想到的想法是将 SF…
对于枚举来说,替换失败不是错误 (SFINAE)
有没有办法对枚举使用替换失败不是错误(SFINAE)? template struct Traits { } template <> struct Traits { }; template <> struct Traits { enum …