替换失败不是错误。这是一种C ++编程技术,允许模板验证有关其模板参数的属性,从而允许在某些类型的对象可用时使用不同的特化。
检查成员函数是否是使用SFINAE而不是requires子句定义的
我想检查类的特定成员函数是否已定义并且同时未被 SFINAE 禁用。以下代码有效: 结构体A { int foo() { 返回 3; } }; 结构体B{}; 温度...
如何正确编写和应用c++20概念/SFINAE/两者通过结构定义选择函数?
请帮助我了解我做错了什么。 我正在尝试使用 RapidJSON 制作一个可序列化的变量包装器。我想提供用户定义的转换函数或使用默认的文字转换...
考虑以下类并特别注意Concrete::copy_assign: 结构类型Erased { TypeErased() = 默认值; TypeErased& 运算符=(TypeErased const& other) {...
我正在尝试根据模板参数使用 std::enable_if 有条件地定义类模板上的成员重载: #包括 #包括 #包括<...
仅当类中存在类型时才定义别名和 getter/setter 函数
我获得了一组我无法更改的课程。 (出于好奇:这些是从 Simulink 模型自动生成的)不幸的是,这些类使太多的东西公开可用......
是否可以检查运算符是否重载<< for type or class exists?
我正在尝试检查运算符是否重载<< exists at compile time using c++17. Ideally it is supposed to be something like following: template 静态无效序列化_存储(
这就是我正在尝试做的事情: 模板 结构模型 { 矢量 顶点; #if T 有一个 .normal 成员 无效变换(矩阵 m ) {
我正在尝试使用enable_if根据模板参数的类型专门化函数模板,类似于此处的示例https://en.cppreference.com/w/cpp/types/enable_if 模板 我正在尝试使用类似于此处示例的enable_if基于模板参数的类型来专门化函数模板https://en.cppreference.com/w/cpp/types/enable_if template<typename Type, typename Enabled = void> void foo(Type t) { std::cout << "primary\n"; std::cout << std::is_same<decltype(t), A>::value << "\n"; } template<typename Type, typename std::enable_if_t<std::is_same<Type, A>::value>::type> void foo(Type t) { std::cout << "specialized\n"; } 但是在这种情况下,仅调用主要定义。如果我尝试对课程做同样的事情 template <class T, class Enable = void> struct Foo { static void bar() { std::cout << "T is blah" << std::endl; } }; template <class T> struct Foo<T, typename std::enable_if<std::is_integral<T>::value>::type> { static void bar() { std::cout << "T is int" << std::endl; } }; 它实现了预期的行为: int main() { A a; // not specializing foo<A>(a); // primary called foo(19); // primary called // does specializing Foo<int>::bar(); // int specialization is called Foo<float>::bar(); // generic is called return 0; } 有人可以向我解释一下这种差异吗?是否有一种方法可以在不使用类的情况下实现所需的行为? 我的代码示例: https://godbolt.org/z/86jsxfqdG 函数模板不能像类模板那样部分特化,它们可以重载。例如 template<typename Type> typename std::enable_if_t<!std::is_same<Type, A>::value> foo(Type t) { std::cout << "primary\n"; } template<typename Type> typename std::enable_if_t<std::is_same<Type, A>::value> foo(Type t) { std::cout << "specialized\n"; } 直播
ranges::view 管道运算符 - 通过将 std::variant 参数隐藏到变量->选项模式来实现 std::visit 的单子链?
我的灵感来自 std::ranges 和 std::view 及其 |有助于链接不同算法的运算符,所以我希望将 std::get_if 和 std::visit 模式打包在引擎盖下以执行 inpl...
C++:使用 SFINAE 检测 Visitor 中的参数类型
我正在编写一个函数,它接受以下形式的访问者: 结构访客{ void 运算符()(int i) {...} void 运算符()(const std::string& s) {...} void 运算符()(const auto& ...
我正在玩 SFINAE,并尝试作为练习,获取有关“类似函数”对象(函数、函数指针、lambda 以及任何重载括号的内容)的信息
我正在玩 SFINAE,并尝试作为练习,获取有关“类似函数”对象(函数、函数指针、lambda 以及任何重载括号的内容)的信息
std::enable_if_t typedef 替换不等效
我经常为类创建一个 this_type typedef 以缩短成员函数签名。 然而,我在使用 std::enable_if_t 时遇到了这个奇怪的情况。 #包括 #包括 #
我发现了这个类型特征,可以用来检查某个类型T是否支持运算符<<: template 结构 has_ostream_operator_impl { 模板 静态
我在C++17中有一个模板函数,其中N个第一个参数需要是整数类型,并且应该在模板替换期间检查这一点。 (对于参数来说,模板函数不应该存在...
为什么未使用的成员模板函数和成员函数声明的隐式实例化类模板实例化失败
这有什么问题: #包括 结构体A; 模板 结构B { 模板::值>> ...
为什么 SFINAE (enable_if) 不适用于类模板的成员函数? [重复]
#包括 结构体A{}; 结构体 B{}; 模板 结构体Foo { 类型名 std::enable_if::value>::type 酒吧() {} 输入...
我有以下使用 std::enable_if 的情况: 模板::值>::类型* = nullptr> 无效 f() { } 你...
使用“表达式 SFINAE”时如何获得普通 `auto` 返回类型的行为?
考虑以下代码。 结构小部件{ int& get(); }; 模板 自动 func_1(X& x) { 返回 x.get(); } 模板 自动 func_2(X& x) ->
我编写了以下模板函数,它检查任意容器是否包含特定元素: 模板 类container_t,类item_t,类...