ICode9

精准搜索请尝试: 精确搜索
  • c – decltype(auto)在某些情况下与SFINAE一起使用?2019-08-28 02:07:09

    我假设decltype(auto)是一个不兼容的构造,当用于尝试和返回类型的SFINAE时.所以,如果你原本会遇到替换错误,那么你会遇到一个很难的错误 但为什么以下程序有效? https://wandbox.org/permlink/xyvxYsakTD1tM3yl #include <iostream> #include <type_traits> using std::cout; usin

  • c – 与SFINAE支票交朋友2019-08-28 00:06:51

    我试图用sfinae检查进行朋友声明时遇到了一些麻烦(如果你不想解释“为什么”和“如何”,你可以跳进代码示例). 基本上,我有一些模板类声明两个私有成员函数.根据模板类型的实例化,我想使用一个或另一个函数. 因此,如果我不希望编译失败,则无法实例化我无法使用的私有函数.所以,我必

  • c – 为什么在SFINAE期间需要参数中的指针?2019-08-27 23:08:39

    为什么我需要*来使检查器成为指针在线 模板< typename C> static yes test(checker< C,& C :: helloworld> *); 为了使编译时间扣除正常工作,输出1 0? 当我删除*时,输出为0 0 #include <iostream> struct Generic {}; struct Hello { int helloworld() { return 0; } }; // SFIN

  • c – std :: make_unique SFINAE友好吗?2019-08-24 05:05:50

    我正在做一些模板元编程,我想实现一个通用的克隆函数,它根据SFINAE表达式的有效性选择克隆方法(替换失败不是错误). 在this reference website它说 The function make_unique<T>( std::forward<Args>(args)... ) is equivalent to: 06001 这是否意味着以下代码 template <ty

  • c – 我们可以使用检测习惯来检查一个类是否具有特定签名的成员函数吗?2019-08-23 03:06:34

    鉴于(减少)detection idiom的实施 namespace type_traits { template<typename... Ts> using void_t = void; namespace detail { template<typename, template<typename...> class, typename...> struct is_detected : std::fa

  • c – sfinae上下文中的模板变量2019-07-31 06:09:11

    请考虑第一段代码,其中使用基本SFINAE触发器来区分类型是否是随机访问迭代器: template <typename T, typename = void> struct is_random_access_iterator : public std::false_type {}; template <typename T> struct is_random_access_iterator<T, std::enable_if_t<

  • 为什么class :: class :: class :: staticClassMember()编译(在C中)?2019-07-31 01:05:52

    我一定错过了C规范中的一些东西,因为我无法解释为什么以下代码成功编译: class MyClass { static void fun(); }; int main() { MyClass::MyClass::MyClass::fun(); } 有人能指出我的标准还是只是解释一下语义?我猜想只允许一个MyClass ::.两个MyClass :: MyClass ::应该导致错误.

  • c – 专门化模板类构造函数2019-07-28 09:17:21

    我想专门化一个模板类构造函数: 如果type为int,则默认值为50和-50.如果它的浮动默认值应为0.5和-0.5. 我的代码是: #include <iostream> #include <limits> #include <type_traits> template<typename T> class Foo{ public: template<typename = typename std::enable_if<

  • c – 使用sfinae来检测可变参数模板的基类是否具有特定方法2019-07-27 16:05:29

    我试图“迭代”一个可变参数派生类的所有基类,并调用一个名为“stream”的方法(如果它存在). 要检查方法是否存在,我使用sfinae,它可以工作(参见注释掉的代码).但是当我将它与可变参数模板“迭代”结合起来如果不起作用时,你的错误有点看起来像sfinae部分突然工作不像预期的那样,当

  • c – 为什么SFINAE在这种情况下对我不正确以及如何解决?2019-07-27 06:09:19

    我试图在struct A中留下一个函数foo(打印0),如果它的参数有模板方法isA< void>和另一个(打印1),如果没有.这段代码(简化为下面的最小例子)编译(尝试使用gcc 6.1.0和clang-3.9.0以及显式–std = c 14选项)并运行. 但它打印1,但是,我确信,它将打印0.我想知道我错在哪里,但真正的问题

  • c – 任何向量的专业化2019-07-25 16:06:30

    我想在模板类中为T的不同情况定义一个函数.我的问题是定义T是一个向量(无论它包含什么)的情况. 这是我的第一次尝试之一: template<typename T> class Test{ protected: T *val; public: Test(T* v):v(val){}; static string typeName(); }; template<typename T> str

  • 表达式未定义时,在C中启用函数模板2019-07-25 01:04:43

    某个表达式未定义时,是否可以启用函数模板(例如,xof类型t不能流式传输到std :: cout).就像是 template<typename t> auto f(const t &x) -> typename enable_if_undefined<decltype(std::cout << x)>::type; 使用SFINAE,我只看到如果定义表达式时如何启用,但是如果表达式未定

  • c – 奇怪的SFINAE代码2019-07-24 19:08:26

    我发现这个代码与SFINAE一起: template<int I> void div(char(*)[I % 2 == 0] = 0) { // this overload is selected when I is even } template<int I> void div(char(*)[I % 2 == 1] = 0) { // this overload is selected when I is odd } 它是如何工作的?它看起来像一

  • c – 操作符[]的SFINAE检查比我更困惑?2019-07-24 17:14:36

    我为operator []编写了简单的检查,但是has_subscript_op结构模板实例化选择了错误的重载: #include <iostream> #include <type_traits> #include <string> #include <map> template<class, class, class = void> struct has_subscript_op : std::false_type { }; templ

  • c – 将std :: invoke_result_t与通用lambda一起使用时出现硬错误2019-07-24 10:07:16

    我有一个类似容器的类,其方法与std :: apply类似.我想用const限定符重载此方法,但是当我尝试使用泛型lambda调用此方法时,我从std :: invoke_result_t的实例化中得到了一个硬错误.我正在使用std :: invoke_result_t来推断方法的返回值以及对参数执行SFINAE检查. #include <type_tr

  • c – 使用std :: enable_if和std :: is_arithmetic作为模板参数进行故障2019-07-24 10:05:29

    我正在尝试实现一个OutputArchive模板类,它具有模板化函数processImpl().看起来像这样: template<typename ArchiveType> class OutputArchive { ... template<typename Type, typename std::enable_if_t<std::is_arithmetic_v<Type>>> inline ArchiveType& p

  • c – SFINAE是否依赖于类型扣除?2019-07-24 10:05:08

    我对cppreference.com中的以下引用感到困惑: This rule applies during overload resolution of function templates: When substituting the deduced type for the template parameter fails, the specialization is discarded from the overload set instead of causing a compi

  • c – 如何使这个boost :: enable_if代码编译(SFINAE)?2019-07-23 09:08:07

    我很困惑为什么以下使用boost :: enable_if的代码无法编译.它检查类型T是否具有成员函数hello,如果是这种情况则调用它: #include <iostream> #include <boost/utility/enable_if.hpp> #include <boost/static_assert.hpp> // Has_hello<T>::value is true if T has a hello funct

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有