草庐IT

list_type

全部标签

C++: list 和从不同目录动态加载 DLL

关于我想要实现的目标的长篇故事我正在开发一个将DLL作为插件动态加载的程序。我正在使用MicrosoftVisualC++2008编译程序。不过,我们假设应该支持Qt工作的任何VisualC++版本。程序目录布局如下:|plugins/|plugin1.dll|plugin2.dll|QtCore4.dll|QtGui4.dll|program.exeprogram.exe发现所有插件DLL文件,对它们执行LoadLibrary()并调用某个签名函数以查明它是否真的是一个插件。这在安装了适用于MSVC90的vcredist的计算机上运行良好。当然,为了使程序在所有计算机上运行,​​我必

c++ - 意外的非常量 std::initializer_list

我正在尝试使用索引技巧来查看我可以去哪里并遇到一个奇怪的错误......首先,普通的不那么旧的索引:templatestructindices{};templatestructmake_indices:make_indices{};templatestructmake_indices:indices{};我创建了一个派生自std::initializer_list的编译时数组类,并使其可索引(假设N3471被您的编译器支持。它将在下一个标准中出现).在这里:templatestructarray:publicstd::initializer_list{constexprarray(st

c++ - gcc-4.9.2 : non-type template parameter

我在gcc-4.9.2上有一个奇怪的编译错误,相同的代码在其他编译器上工作,比如gcc-4.8或我能找到的任何clang。问题与non-typetemplate-arguments有关.所以考虑一下:#include#includeinttemplateParam;templatestructTestTemplate{intvalue(){}};templateintTestTemplate::value(){returntemplateParam;}TestTemplatetestVariable;intmain(){std::cout我在gcc-4.9.2中遇到以下错误:prog.

c++ - 是否为 initializer_list 提供一个私有(private)构造函数?

此标准草案显示了initializer_list的概要.它没有私有(private)构造函数。但是我看过的两个标准库实现,libstdc++和libc++,都提供私有(private)构造函数://Thecompilercancallaprivateconstructor.constexprinitializer_list(const_iterator__a,size_type__l):_M_array(__a),_M_len(__l){}_LIBCPP_ALWAYS_INLINE_LIBCPP_CONSTEXPR_AFTER_CXX11initializer_list(const_E

c++ - 为什么 std::span 缺少 size_type?

我一直在将使用我的自制span类的旧代码更新为更符合C++20std::span的代码,但我遇到了编译错误,因为std::span没有size_type而是有index_type。关于index_type是否应该签名的问题一直存在争议,但为什么要跳过size_type?这打破了期望容器(或类似容器的对象)具有size_type的通用代码。 最佳答案 原提案P1022R0,当它被称为array_view时,有一个size_type成员。它在第一次修订中被删除了P1022R1作为简化的一部分,因为当时不需要size()和元素访问,使用带

c++ - constexpr 与 std::array - "Non-type template argument is not a constant expression"

这个问题在这里已经有了答案:Errorusingaconstexprasatemplateparameterwithinthesameclass(2个答案)关闭9年前。我正在尝试实现以下内容:#include#includeclassClass2{};classClass1{public:staticconstexpruint8_tGetMax(){return5;}staticconstexpruint8_tGetMin(){return0;}staticconstexpruint8_tGetCount(){returnGetMax()-GetMin()+1;}private:std

c++ - 为什么 push_back 签名是 void push_back (const value_type& val) 而不是 void push_back (value_type val)?

这个问题在这里已经有了答案:Passingbyvaluevsconst&and&&overloads(3个答案)关闭8年前。为什么push_back的函数签名如下?voidpush_back(constvalue_type&val);传递的值被复制到容器中,为什么不直接复制到参数列表中呢?voidpush_back(value_typeval);

c++ - 不完整的类型和 initializer_list

我正在尝试为一些元数据建模以序列化/反序列化C++对象。这里有一些东西可以捕捉到我需要的细节;它使用GCC5.2(g++sample.cpp-std=c++14)和Clang3.6(clang++sample.cpp-std=c++14)编译。我的问题是关于示例中的structTypeInfo。它包含一个std::initializer_list本身。这符合标准吗?#include#includeenumclassTypeCode:std::uint8_t{BOOLEAN,INT,OBJECT,STRING,SENTINEL};structTypeInfo{TypeCodetypeCo

c++ - std::list 如何分配节点与元素

std::list如何分配它保留next/prev指针和T它包含的元素?我认为标准分配器只能用于为一种类型分配内存(因为std::allocator::allocate以sizeof(T)为增量分配内存).因此,在一次分配中分配列表节点和包含的对象似乎是不可能的,这意味着必须根据实现决定分配节点,并且节点存储指向对象的指针而不是对象本身,这意味着从指向列表节点的指针到它包含的对象的两个间接级别,这似乎效率低下。是这样吗? 最佳答案 分配器有一个成员模板类rebind,负责分配其他类型。std::allocator的页面here实际上

c++ - 为什么在 C++11 中为 std::initializer_list 重载 std::begin() 和 std::end()?

在C++11(引用N3337)中,std::begin()和std::end()被指定为(§24.7[iterator.range]/p2-3)templateautobegin(C&c)->decltype(c.begin());templateautobegin(constC&c)->decltype(c.begin());2Returns:c.begin().templateautoend(C&c)->decltype(c.end());templateautoend(constC&c)->decltype(c.end());3Returns:c.end().但是,std::in