sfinae

    4热度

    3回答

    重构遗留代码我想合并彼此相关的单独模板类/结构(以避免命名空间污染)。 Nested(下图)为MyStruct一个辅助类,这是我想要移动到MyStruct。 但我不能做这项工作: #include <type_traits> #include <iostream> struct YES {} ; struct NO {}; template <typename TYPE> struc

    5热度

    1回答

    我正在实现一些非常类似于std::vector的东西,但在堆栈上使用数组而不是内存分配。 d-tor调用一个使用SFINAE的函数。 如果value_type是POD功能有空体。 如果value_type是普通类std::string,则该函数具有正文并正确销毁所有数据。 现在,我希望能够使用这个新的std::vector作为constexpr。然而即使C-tor被宣布为constexpr,代码也

    3热度

    2回答

    我想围绕SFINAE包裹我的头。 我们正在使用它来检查一个班级是否有一种名为“乘客”的方法。 通过一些在线示例,我们构建了以下模板类。 #ifndef TYPECHECK #define TYPECHECK #include "../Engine/carriage.h" namespace TSS{ template<typename T> class has_passengers

    7热度

    2回答

    我的爱好库的基本组件必须与C++ 98和C++ 11编译器配合使用。为了学习和享受我自己,我创建了几种类型支持功能(如enable_if,conditional,is_same,is_integral等)的C++ 98实现,以便在没有C++ 11支持时使用它们。 但是,当我实施is_constructible我卡住了。有什么样的模板魔法(某种SFINAE),我可以在没有C++ 11支持的情况下实现

    1热度

    1回答

    如何在库用户对模板类的模板参数使用错误的类型时实现错误消息? TEST.CPP(从here适应) #include <type_traits> template <typename T, typename Enable = void> class foo; // Sorry, foo<T> for non-integral type T has not been implemented.

    1热度

    1回答

    如何在不使用任意typedefs的情况下获得此效果? #include <type_traits> #include <iostream> typedef int Primary; typedef float Secondary; template<Class C, std::enable_if<std::is_same<Class, Primary>::value || std::i

    5热度

    4回答

    cppreference.com(http://en.cppreference.com/w/cpp/types/enable_if#Notes)指出: 一个常见的错误是只声明在其默认模板参数的不同的两个函数模板。这是非法的,因为默认模板参数不是函数模板签名的一部分,并且声明具有相同签名的两个不同函数模板是非法的。 struct T { enum { int_t,float_t } m_t

    1热度

    1回答

    这个问题真的没有背景。 使用SFINAE(直接或间接使用type_traits)检查现有函数,成员函数等等的方法有很多。但是: 第一个问题:有什么办法来检查一个类是否实现了一个特定的用户定义的转换运算符? 为了说明我的意思,请考虑这段代码。我想没有任何断言失败运行这段代码: #include <type_traits> #include <cassert> struct NotADouble

    5热度

    3回答

    考虑下面的代码: auto f() -> decltype(auto) { /* do whatever you want here */ } int main() { f(); } 返回类型推导并decltype(auto)用作后返回类型。 下面的代码是一个稍微修改的(实际上,sfinae'd)版本: struct S { static void f() {} }; struct T {

    0热度

    1回答

    我有一些方法,比如说,foo一个模板类。我想为所有POD类型的此方法指定一个默认行为,并为其他类型引入单独的特化。 (真正的问题更复杂,但是这是一个MWE。)我试图用SFINAE以通常的方式做到这一点。 template<typename T> class C { public: void foo(T t); }; template<typename T> typename