-
1 votesanswersviews
成员和成员函数的模糊部分模板特化
我不明白为什么这个代码在使用 &T::b 和 &T::c 时由于"ambiguous class template instantiation"而无法在 main() 中编译 . 这是g 4.6.1的错误吗? #include <iostream> #include <string> using namespace std; struc... -
8 votesanswersviews
SFINAE constexpr与std :: get
这是Detecting constexpr with SFINAE的后续问题 . 我想检测元组的元素(或任何可与 std::get 一起使用的元素)是否为constexpr . 所以我编写了以下助手,类似于Xeo给出的: template<size_t> struct sfinae_true : std::true_type{}; template<size_t N, clas... -
3 votesanswersviews
为模板参数限制定义某些外部模板类的部分特化
我有一个班Foo和 class 酒吧 . 它们是std :: array的包装器 . 它们都有一些派生类 . template<typename T, std::size_t N> struct Foo { std::array<T, N> data; }; template<typename T, std::size_t N> struct FooD... -
1 votesanswersviews
std :: result_of无法返回void返回类型
我正在尝试使用SFINAE来创建函数调用包装器,使用std :: result_of来获取函数的返回类型 . 小样本重现问题: void test(int) {} template<typename T, typename... Args, typename R = typename std::result_of<T(Args...)>::type, typename std:... -
1 votesanswersviews
C SFINAE在MSVC 2015中的伪参数中
我试图尽可能简单地执行SFINAE重载,以便编写几种 getSize(s) 函数:一个返回 s.getSize() ,另一个 s.GetLength() ,然后我可能会添加 s.length() 等 . 不幸的是,此代码在MSVC 2015 Update 3上产生了奇怪的错误: 我错过了什么,或者这是一些编译问题? template <typename T> static size_... -
3 votesanswersviews
sfinae上下文中的模板变量
请考虑第一段代码,其中使用基本SFINAE触发器来区分类型是否是随机访问迭代器: template <typename T, typename = void> struct is_random_access_iterator : public std::false_type {}; template <typename T> struct is_random_access... -
0 votesanswersviews
模板类的模板操作员朋友,带有enable_if
我如何使用enable_if作为模板化类的朋友制作模板化运算符? 这是我的问题的一个例子: #include <type_traits> template<typename CHAR_TYPE> class BasicString; template<typename CHAR_TYPE, typename OTHER_CHAR_TYPE, typenam... -
34 votesanswersviews
使用SFINAE进行模板类专业化
假设我有这些声明 template<typename T> class User; template<typename T> class Data; 并且想要为 T = Data<some_type> 实现 User<> 以及从 Data<some_type> 派生的任何类,但也允许在其他地方定义的其他特化 . 如果我还没有类模板 Us... -
1 votesanswersviews
gcc vs. clang:使用std :: declval和模板专门化“无效使用不完整类型”
我有一个方法 fun ,它包含在struct Impl 中,用于部分特化 . 检查 is_derived_from_template 用于确定泛型 Impl::fun 是否可以用于某种类型(如果它来自特定模板) . 否则, Impl 明确地部分专门化 . #include <iostream> template <typename T, typename U> stru... -
3 votesanswersviews
SFINAE与std :: enable_if和std :: is_default_constructible for libc中的不完整类型
当我使用SFINAE来检测模板类型是否是默认构造时,我刚刚观察到libc的一个奇怪问题 . 以下是我能够提出的最小例子: #include <iostream> #include <type_traits> template <typename T> struct Dummy; template <> struct Dummy<int>... -
3 votesanswersviews
这个SFINAE C语法如何工作?
我刚刚开始涉足SFINAE并且我无法理解以各种形式出现的最常用示例背后的语法,但其目的是检查特定类型是否包含给定成员 . 这个特别来自Wikipedia: template <typename T> struct has_typedef_foobar { typedef char yes[1]; typedef char no[2]; template &l...