12得票8回答
我该如何有条件地定义默认构造函数?

我在考虑一个类,例如:template < typename ...Whatever > class MyClass { public: static constexpr bool has_default_ctr = Something; // I want th...

12得票1回答
在使用constexpr函数作为参数时,enable_if在Visual Studio中无法正常工作

我目前正在处理使用Visual Studio 2017编译的问题(如果有帮助,使用/std:c++latest编译)。 问题代码只是根据一些模板化的constexpr函数的结果选择结构体特化。GCC和clang没有编译它的问题。 以下是我的MCVE: #include <type_...

12得票2回答
组类模板特化

有没有一种技巧/最佳风格来为特定类型分组类模板的专业化? 例如:假设我有一个类模板Foo,我需要将其同样专门化为类型集。 A = { Line, Ray } 另外一种排版方式适用于类型B B = { Linestring, Curve } 目前我正在做的事情:(技术方面也在这里...

12得票1回答
如何使用std::enable_if在条件下选择可变参数构造函数?

我试图创建一个类,它应该继承其他类的构造函数,但不继承这些类本身。 在我的类初始化过程中的某一时刻,我想使用完美转发来创建一个类型的对象,该类型的构造函数与给定参数匹配。 除了没有参数的默认构造函数之外,不应有任何歧义。 以下是我的代码:#include <string> ...

12得票2回答
`std::enable_if`是一个函数指针吗?如何实现?

我希望使用SFINAE技术来在用户传递函数指针作为参数时启用特定的模板。 我搜索过但没有找到相关信息 - 我还尝试查看了<type_traits>文档,但没有找到类似于is_function_ptr<T>的东西。 所谓函数指针,是指全局函数指针,例如TReturn(...

12得票3回答
使用概念定义的方式,针对任何容器类型实现特定值类型的C++迭代器。

我希望摆脱模板中所有不可描述的enable_if并用C++20概念替换它们,但是几乎没有关于概念的信息,并且几乎每个来源的语法都有所变化。 这是一个接受任何具有MyClass值的容器的两个迭代器的函数:template <class IteratorType, typename = s...

11得票2回答
在std::enable_if中使用sizeof...

以下代码无法编译,我就是想不通为什么。 template <class T, class... Ts> typename std::enable_if<sizeof...(Ts) > 0>::type func() { // nop } 生成的错误信息为...

11得票2回答
无法使用std::enable_if作为函数参数来推断模板参数

所以,我正在按照这个网页上某处的代码示例进行操作: http://eli.thegreenplace.net/2014/sfinae-and-enable_if/ 这是我所拥有的内容: template<typename T> void fun(const typename s...

11得票1回答
如何在转换运算符中使用std::enable_if?

基本上,我希望我的范围类型能够从Range<const char>隐式转换为Range<const unsigned char>。由于该函数没有参数并且没有返回值,因此std::enable_if似乎不可能。有什么解决方法吗? 以下是我尝试的基本内容: templa...

11得票4回答
使用 enable_if 来可选添加结构体成员

给定这个模板:template <class A> struct Something { ... // members common to all template instantiations for all A types SpecialType member...