sfinae 相关问题

替换失败不是错误。这是一种C ++编程技术,允许模板验证有关其模板参数的属性,从而允许在某些类型的对象可用时使用不同的特化。

检查成员函数是否是使用SFINAE而不是requires子句定义的

我想检查类的特定成员函数是否已定义并且同时未被 SFINAE 禁用。以下代码有效: 结构体A { int foo() { 返回 3; } }; 结构体B{}; 温度...

回答 1 投票 0

如何正确编写和应用c++20概念/SFINAE/两者通过结构定义选择函数?

请帮助我了解我做错了什么。 我正在尝试使用 RapidJSON 制作一个可序列化的变量包装器。我想提供用户定义的转换函数或使用默认的文字转换...

回答 1 投票 0

SFINAE 用于检查涉及复制赋值的复杂表达式的有效性

考虑以下类并特别注意Concrete::copy_assign: 结构类型Erased { TypeErased() = 默认值; TypeErased& 运算符=(TypeErased const& other) {...

回答 1 投票 0

如何有条件地声明类模板上的成员重载?

我正在尝试根据模板参数使用 std::enable_if 有条件地定义类模板上的成员重载: #包括 #包括 #包括<...

回答 1 投票 0

仅当类中存在类型时才定义别名和 getter/setter 函数

我获得了一组我无法更改的课程。 (出于好奇:这些是从 Simulink 模型自动生成的)不幸的是,这些类使太多的东西公开可用......

回答 1 投票 0

是否可以检查运算符是否重载<< for type or class exists?

我正在尝试检查运算符是否重载<< exists at compile time using c++17. Ideally it is supposed to be something like following: template 静态无效序列化_存储(

回答 1 投票 0

使用enable_if检查成员是否存在

这就是我正在尝试做的事情: 模板 结构模型 { 矢量 顶点; #if T 有一个 .normal 成员 无效变换(矩阵 m ) {

回答 8 投票 0

使用enable_if进行模板专门化对于函数和类的行为不同

我正在尝试使用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"; } 直播

回答 1 投票 0

ranges::view 管道运算符 - 通过将 std::variant 参数隐藏到变量->选项模式来实现 std::visit 的单子链?

我的灵感来自 std::ranges 和 std::view 及其 |有助于链接不同算法的运算符,所以我希望将 std::get_if 和 std::visit 模式打包在引擎盖下以执行 inpl...

回答 1 投票 0

C++:使用 SFINAE 检测 Visitor 中的参数类型

我正在编写一个函数,它接受以下形式的访问者: 结构访客{ void 运算符()(int i) {...} void 运算符()(const std::string& s) {...} void 运算符()(const auto& ...

回答 1 投票 0

在特征中查找任何可调用的返回类型时出现 SFINAE 错误

我正在玩 SFINAE,并尝试作为练习,获取有关“类似函数”对象(函数、函数指针、lambda 以及任何重载括号的内容)的信息

回答 1 投票 0

SFINAE 类型推导给我不完整的类型错误

我正在玩 SFINAE,并尝试作为练习,获取有关“类似函数”对象(函数、函数指针、lambda 以及任何重载括号的内容)的信息

回答 1 投票 0

std::enable_if_t typedef 替换不等效

我经常为类创建一个 this_type typedef 以缩短成员函数签名。 然而,我在使用 std::enable_if_t 时遇到了这个奇怪的情况。 #包括 #包括 #

回答 1 投票 0

输入特征来检查给定类型是否存在 istream 运算符>>

我发现了这个类型特征,可以用来检查某个类型T是否支持运算符<<: template 结构 has_ostream_operator_impl { 模板 静态

回答 1 投票 0

模板替换时访问参数包中的索引

我在C++17中有一个模板函数,其中N个第一个参数需要是整数类型,并且应该在模板替换期间检查这一点。 (对于参数来说,模板函数不应该存在...

回答 1 投票 0

为什么未使用的成员模板函数和成员函数声明的隐式实例化类模板实例化失败

这有什么问题: #包括 结构体A; 模板 结构B { 模板::值>> ...

回答 3 投票 0

为什么 SFINAE (enable_if) 不适用于类模板的成员函数? [重复]

#包括 结构体A{}; 结构体 B{}; 模板 结构体Foo { 类型名 std::enable_if::value>::type 酒吧() {} 输入...

回答 1 投票 0

为什么模板参数中的enable_if_t会抱怨重新定义?

我有以下使用 std::enable_if 的情况: 模板::值>::类型* = nullptr> 无效 f() { } 你...

回答 5 投票 0

使用“表达式 SFINAE”时如何获得普通 `auto` 返回类型的行为?

考虑以下代码。 结构小部件{ int& get(); }; 模板 自动 func_1(X& x) { 返回 x.get(); } 模板 自动 func_2(X& x) ->

回答 1 投票 0

如果类具有特定的成员函数,如何启用函数模板?

我编写了以下模板函数,它检查任意容器是否包含特定元素: 模板 类container_t,类item_t,类...

回答 1 投票 0

© www.soinside.com 2019 - 2024. All rights reserved.