我有一个 class Foo ,它可以由 C 风格的字符串、字符串视图和非临时字符串构造(实际上它包含其他成员和方法,并且它在传递给basic_string*模板的字符上进行模板化):struct Foo { explicit constexpr Foo() : text{} ...
我有一个 class Foo ,它可以由 C 风格的字符串、字符串视图和非临时字符串构造(实际上它包含其他成员和方法,并且它在传递给basic_string*模板的字符上进行模板化):struct Foo { explicit constexpr Foo() : text{} ...
我目前正在研究enable_if并且我有这段代码://template<typename T, typename = int/double/float/...> //not working properly template<typename T, typename = void ...
我有一个用户定义的 classtemplate<typename T, int N> class MyClass { // Implementation }; 如果它的模板参数是 MyClass 的实例,我想检查另一个 class 的实例化template<typename T, ...
我需要一个图像 class 模板,它可以处理具有不同维度和不同格式的图像。 而且我还想为 1D、2D 和 3D 图像定义不同的 class 模板特化(只有这三个,其他将未定义 - 这样它们就不能使用)。 摘要代码:enum image_format {R, G, B, RG, GB, RB, RGB ...
我想看看 map 实现是否支持不完整的类型,因为 libc++ 似乎支持它们,但 stdlibc++ 不支持。 我在这里尝试了 SFINAE,但它给出了一个编译错误: ...
我尝试编写一个元函数type_par_same_as ,只要true_type的模板参数与给定类型匹配,它就会选择 true_type : 演示 这是我得到的: 我的方法是原始模板模板参数只接受模板的任何特化,例如std::vector (无类型)。 然后我 SFINAE-out class 与 ...
我在 c++ 中学习了 SFINAE。然后我编写了以下程序,它使用 msvc 编译(和执行)但不使用 gcc 和 clang。现场演示 正如我们所见,调用e.common()适用于 msvc,但被 gcc 和 clang 拒绝。GCC 说: 我想知道根据 C++ 标准的正确行为是什么。 请注意,我 ...
我维护一个 Arduino 库,它使用以下代码(简化)打印红外线接收到的结果。 大多数 32 位 arduino 内核提供 function size_t Print::print(unsigned long long n, int base)并且编译没有错误。 但是有 32 位内核,不提供siz ...
我有两个 class 专业。 我希望其中一个在 T::A 存在时使用,另一个在 T::B 存在时使用,这在实践中应该是相互排斥的。 我正在使用 std::void_t< decltype(... ) > 来测试是否存在。 我希望该表达式无法针对一个或另一个专业化进行评估,因此我希望 S ...
SFINAE,“替换失败不是错误”,是在 function 模板的重载解析期间应用的众所周知的规则/技术(参见例如SFINAE @cppreference )。 但是,在 C++ 标准中从未使用该名称引用它; 我能找到的唯一参考是来自<version>的依赖于实现的宏,如[versi ...
我有一个派生的 class, Wrapper ,它继承自模板定义的基类 class。我想配置Wrapper ,以便如果基类 class 具有构造函数参数, Wrapper的构造函数还包括基类的构造函数参数,以便它可以将它们转发给基础 class 构造函数:struct Base1 { Base1 ...
目前,我的代码库中有这个模板化的 function,它在 C++17 中运行良好: 但是,function 有两个问题: 它使用if constexpr ,这意味着它不会在 C++11 或 C++14 下编译。 它使用std::is_literal_type ,它在 C++17 中被弃用并在 C+ ...
受SFINAE 的启发来检查 std::less 是否可以工作,我得出这个结论: 如果<已为类型F定义,则Queue将为std::priority_queue ,否则为std::queue 。 但它似乎总是匹配std::queue的情况: 这表明两个Queue都是std::queue : 我 ...
一方面,function boost::hana::is_valid呈现如下检查 SFINAE 友好的表达式是否有效。 给定一个 SFINAE 友好的 function, is_valid返回 function 调用是否对给定的 arguments 有效。 具体来说,给定一个 function f ...
Boost.Hana提供boost::hana::is_valid来检查 SFINAE 友好的表达式是否有效。 你可以像这样使用它 struct Person { std::string name; }; auto has_name = hana::is_valid([](auto ...
我想为 class 成员编写通用访问器,无论它是 function 还是数据成员: 我正在使用具有void_t专业化的 SFINAE,但它仅适用于单一专业化。 否则会给出错误error C2953: 'traits::_name<T,void>': class template has ...
我在 这里看到了这个使用 SFINAE 检查类型是否可流式传输的示例。 但是,我注意到它不可移植,即使用不同的编译器为模板类型返回不同的结果。 我很高兴有任何提示来理解这里的问题。 下面的代码返回true, false对于 GCC 12 或更高版本返回true, true ,而对于早期版本的 GC ...
当 SFINAE 获得未知输入时,我想通过引用处理不可复制类型,我下面的代码无法工作,有没有更好的方法? ...
我正在编写一个可扩展的库,可以方便地为自定义类型重载 STL 的to_string() 。 为此,我设计了一个通用的重载模板,如果不是专门的,它会引发异常: 这很有用,主要是因为描述将清楚地解释该问题以及如何解决它,并避免必须使用多态性来实现派生实现(function 对于某些应用程序(例如序列化、 ...
我正在尝试创建一个包含std::variant的 class 和一个成员 function,该成员仅接受嵌套变体 object 持有的类型。 function 的工作方式与变体的operator=基本相同。 但是,问题是 - 如何将std::enable_if和type_traits与模板参数包 ...