C ++ 17是2017年批准的C ++标准的名称。它基于以前的C ++ 14标准,改进了核心语言和标准库,并添加了一些新的语言功能。
是否可以在 std::array 内创建 std::array 的 constexpr 值?
我正在优化一些设置代码。这是一个大型预定义值数组,分为三个嵌套结构。它被定义为 结构体PerId { const Id m_Id; 常量 uint3...
`std::cout << &i <<` print address of `i` or address of each element in num?
#包括 #包括 int 主函数 () { std::vector num {1, 2, 3}; for (const int &i : num) { std::cout << i <<"\n"...
这是代码片段 #包括 #包括 结构体 __declspec(dll导出) 福{ std::unordered_map> foo; }; 福...
我有一个名为逻辑的类,它包含一个评估标准。不同的对象最多可以有 20 个这样的条件。我目前有一个包含多个逻辑类的数组。 ...
我派生自一个基类,我尝试在其中定义一个类型。该类型通过变体依赖于自身,因此需要在定义时了解基类的内存布局。豪...
C++17 中可能存在 is_variadic 类型特征吗?
在 C++17 中,是否可以设计一个类型特征来检测可调用对象是否是可变参数(因此可以采用任意长的参数数量)? 模板 是否可以在C++17中设计一个类型特征来检测可调用对象是否是可变参数(因此可以采用任意长的参数)? template <class Callable> struct is_variadic; 我目前不知道如何做到这一点,但我无法说服自己这是不可行的。那么如果可行的话会是什么样子? 如果函数类型是可变参数,则 is_variadic 类型特征为 true。 这意味着类型特征必须部分特化才能接受可以接受可变数量参数的函数类型。 template <typename> struct is_variadic : std::false_type {}; template <typename R, typename ...Args> struct is_variadic<R(Args..., ...)> : std::true_type {};
考虑这个简单的函数 模板 自动 mkVector(U&& x0) { 返回 std::vector>{std::forward(x0)}; } 以及 4 个可能的用例...
如何实现 std::variant 包装类的隐式转换和运算符?
我正在尝试实现 std::variant 包装器,在分配和创建方面其行为与 std::variant 类似,但也允许隐式转换为变体持有的所有替代项。
我需要为 std::get 函数添加别名,以提高代码的可读性。 不幸的是,我遇到了编译时错误 get<0> in namespace ‘std’ does not name a type。使用相当于
模板函数 func 设计为可在任何地方使用。它对任何 T 都有相同的函数体。我只想写一次它的函数体。但功能取决于定义类型 模板功能func<T>设计用于任何地方。对于任何T,它都有相同的函数体。 我只想写一次它的主体。但该功能取决于 type<T> 的定义才能正常工作,并且在某些情况下没有 type<T> 的定义。请参阅以下示例(C++17 中): /// type.h #include <stddef.h> #include <stdint.h> #include <type_traits> template<typename T, typename = void> struct type; template<typename T> size_t func() { return type<T>::magic; } template<typename T> struct type<T, std::enable_if_t<std::is_arithmetic_v<T>>> { static constexpr size_t magic = sizeof(T) * 2; }; /// my_type.h struct MyStruct { int a; static void Dummy(); }; /// my_type.cpp #include "my_type.h" #include "type.h" template<> struct type<MyStruct> { static constexpr size_t magic = 123; }; void MyStruct::Dummy() { (void)func<MyStruct>(); } /// main.cpp #include "my_type.h" #include "type.h" int main(int argc, char **argv) { func<int>(); // OK func<MyStruct>(); // Error } 我怎样才能做到这一点: 只写一次func<T>的正文。 当 func<T> 不完整时,可以调用 type<T>。 注意:有一个 Dummy 函数,用于强制编译器为 func<MyStruct> 生成代码,以便链接器满意。 使用显式实例化: /// my_type.h struct MyStruct { int a; }; // Explicit instantiation declaration extern template size_t func<MyStruct>(); /// my_type.cpp #include "my_type.h" #include "type.h" template<> struct type<MyStruct> { static constexpr size_t magic = 123; }; // Explicit instantiation definition template size_t func<MyStruct>(); 声明它存在于头文件中(因此包含头文件的任何内容都可以看到声明,而不是尝试实例化模板本身),并在类型完成后在源文件中定义它。 您也不再需要Dummy,无论如何也不能保证它能工作。
为 QObject 创建一个 Q_PROPERTY,该 QObject 拥有自己的 Q_PROPERTY
我有一个带有两个 Q_PROPERTIES 的 QInnerItem 类 QInnerItem : 公共 QObject { Q_OBJECT Q_PROPERTY(int bar1 READ bar1 WRITE setBar1 NOTIFY bar1Changed) Q_PROPERTY(int bar2 READ bar2 WRITE
大家好。我提前为我的英语道歉。 有人可以帮助我吗?我不明白为什么会发生这种情况以及我做错了什么。 我有一个带有静态常量的单独类(当前...
我开始用 std::string_view 进行实验。 它有一个非常丑陋的特点。你不能说: std::string_view 和 std::string_view 就像很棒的 std::span 一样。 所以,你不能...
我不明白带有包扩展的 lambda std::array 的初始化
我发现以下代码(由 phoeen 编写)在运行时实例化基于索引的变体: 模板 std::variant make_variant(std::size_t i) { 断言(我 < s...
使用星号的金字塔形状 你好,我是 C++ 新手,我尝试了嵌套循环,但我不知道下一步是什么,看到了一些解决方案,但我不明白。 如果你知道,请写下来。
有什么方法可以让它自动检测 std::array 中的大小<int,5>
模板 void print(const std::array& data){ for(自动它:数据){ std::cout << it << std::endl; } } int main(){ std::array template<typename T, size_t N> void print(const std::array<T,N>& data){ for(auto it : data){ std::cout << it << std::endl; } } int main(){ std::array<int,5> arr{1,2,3,4,5}; print(arr); ^ | /* Here in main method in the std::arr<int,5> I am explicitly specifying the size of the array but I'll need just like template it should detect size automatically and I don't want to specify the size explicitly */ } 我尝试过: template <typename Container> void print(const Container& container) { std::copy(std::begin(container), std::end(container), std::ostream_iterator<typename Container::value_type> (std::cout," ")) } 而且效果很好,就像这样。我需要模板而不需要像这样在 std::array<int,5> 中明确指定大小。 C++17 引入了类模板参数推导。因此,只需完全删除模板参数即可: std::array arr{1,2,3,4,5};
我正在编写一个图形编辑器程序。在程序中,我只能绘制两种形状:圆形和矩形。我能够正确选择并拖动矩形,但对于圆形它我...
$树 。 |-- 外部.c |-- sc.h `--serial_comm.cpp $ 猫外部.c #include“sc.h” int main() { 结构 MyStruct* sc; sc->myFunction1(); } $ 猫 SC.H #ifndef SC_H #d...
如何使 std::function<void(X)> 接受第一个参数是 X 的多态子类型的 lambda?
假设我有一个像这样的通用事件类: // 事件(通用) 结构事件{ // 事件类型 std::string m_type; // c-tor 事件(const std::string& type) : m_type(type) { /* ...
C++11/17 中 std::atomic 的间接和直接初始化。有什么区别?
在 CPP Con 2017 网络研讨会上,Fedor Pikus 说:“它必须是直接初始化” 这是网络研讨会的链接。 这些初始化方法有什么区别? (和