sfinae

    17热度

    3回答

    使用C++ 11的enable_if我想定义几个专门的函数实现(基于参数的类型,比如说)以及默认实现。什么是定义它的正确方法? 以下示例因为调用“generic”实现而无法按预期工作,无论类型为T。在我的小例子, #include <iostream> template<typename T, typename Enable = void> void dummy(T t) { s

    3热度

    2回答

    Demo A :: foo的类声明。 struct A { template <typename T> void foo(T a); }; A :: foo现在被sfinae分割。 template <typename T> typename std::enable_if<(sizeof(T) > 4), void>::type A::foo(T a) { s

    0热度

    1回答

    我正在使用SFINAE构建一个基本的序列化库。 比方说,我有一个类实现了一个通用的process方法,该方法读取任何类型(允许用户扩展)并对其进行序列化。我正在使用std::enable_if将此方法专用于不同的模板参数类型。下面是一个例子: class OutputSerializer { public: OutputSerializer(std::ostream& str) :

    0热度

    4回答

    我想使用static_assert强制失败。如果您尝试以特定方式实例化特定的模板化函数,我想生成编译器错误。我可以让它工作,但它真的很难看。有没有更简单的方法来做到这一点? 这是我第一次尝试。这根本不起作用。即使没有人试图使用这个函数,它总是会产生一个错误。 template< class T > void marshal(std::string name, T *value) {

    9热度

    2回答

    我想检查某个模板专业化是否存在,其中一般情况下没有定义。 考虑: template <typename T> struct A; // general definition not defined template <> struct A<int> {}; // specialization defined for int 我想这样定义一个结构: template <typename T>

    2热度

    1回答

    如果我取消注释包含foo<double>()的行,因为B<double>取决于A<double>,这是一个不完整的类型,所以下面的程序不能编译。 #include <iostream> using namespace std; template <class T> struct A; // forward declaration (incomplete) template <> stru

    4热度

    3回答

    我想拥有一个接受不同类型参数的泛型函数(或方法)。如果提供的类型具有'one'方法,则该函数应该使用它。如果它有'两个'方法,该函数应该使用它。 这里是无效的代码: #include <iostream> template<typename Type> void func(Type t) { t.one(); } template<typename Type> void fu

    0热度

    1回答

    忽略返回类型,有这样一段代码: template <typename T, typename R> struct is_dereferenceable_exact { typedef char yes; typedef struct { char dummy[2]; } no; template <typename U, R (U::*)() const>

    2热度

    2回答

    如何在不使用void_t的情况下实现C++ detection idiom?换句话说,我可以仅使用C++ 03特性来实现C++ 17 std::is_detected等吗? UPD根据定义,检测习惯用法需要C++ 11。在我的问题中,我的意思是我想实现is_detected而不是void_t。我的问题在于:别名模板中未使用的参数不能保证确保SFINAE并可以被忽略,VS VS 2013有这个缺陷;

    5热度

    3回答

    我想创建部分专用模板,如果传递了一个std::unique_ptr template <typename T, typename = void> struct Foo; // A template <typename T> struct Foo<std::unique_ptr<T>, typename std::enable_if<std::is_class<T>::value>::ty