草庐IT

static-memory-allocation

全部标签

c++ - SFINAE:static_assert 与 std::enable_if

以下(建议!)语法有什么缺点吗?templatevoidf()static_assert(std::is_same::value){;}而不是SFINAE(看起来像拐杖):template::value>::type>voidf(){;}甚至更糟:templatetypenamestd::enable_if::value>::typef(){;}其中禁止使用auto推导结果类型。 最佳答案 首先,它们是不同的,特别是它们不是同时检查的。关键的区别在于它们在重载解析方面的应用。SFINAE将从重载集中剔除函数,以便选择另一个函数(如果

c++ - SFINAE:static_assert 与 std::enable_if

以下(建议!)语法有什么缺点吗?templatevoidf()static_assert(std::is_same::value){;}而不是SFINAE(看起来像拐杖):template::value>::type>voidf(){;}甚至更糟:templatetypenamestd::enable_if::value>::typef(){;}其中禁止使用auto推导结果类型。 最佳答案 首先,它们是不同的,特别是它们不是同时检查的。关键的区别在于它们在重载解析方面的应用。SFINAE将从重载集中剔除函数,以便选择另一个函数(如果

c++ - 通过 static_assert 强制执行模板类型

我试图了解static_assert的用处,我想知道它是否可以帮助我执行设计,如果可以,如何。我有一个通用模板类,它将自己的实现隐藏在另一个模板类中,该模板类根据模板类型的大小部分专门化。以下是此设计的简要概述:templatestructHelper;templatestructHelper{staticTbar();};//...otherspecializations...templateclassFoo{public:Tbar(){returnHelper::bar();}};Foo仅在大小为T时才被支持由Helper的特化支持。例如,Foo和Foo都支持。然而,假设用户试图构

c++ - 通过 static_assert 强制执行模板类型

我试图了解static_assert的用处,我想知道它是否可以帮助我执行设计,如果可以,如何。我有一个通用模板类,它将自己的实现隐藏在另一个模板类中,该模板类根据模板类型的大小部分专门化。以下是此设计的简要概述:templatestructHelper;templatestructHelper{staticTbar();};//...otherspecializations...templateclassFoo{public:Tbar(){returnHelper::bar();}};Foo仅在大小为T时才被支持由Helper的特化支持。例如,Foo和Foo都支持。然而,假设用户试图构

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

c++ - 为什么强类型枚举可以用没有static_cast的整数初始化?

enumclassE{};intmain(){Ee1{0};//okEe2=0;//notok//error:cannotinitializeavariableof//type'E'withanrvalueoftype'int'}我的编译器是clang4.0,带有选项-std=c++1z。预计Ee2=0;不行,因为E是强类型的。不过,让我吃惊的是Ee1{0};应该没问题。为什么没有static_cast可以用整数初始化强类型枚举? 最佳答案 看reference自C++17起允许使用列表初始化器:Bothscopedenumerat

C++ boost库shared_memory_object undefined reference 'shm_open'

我尝试在ubuntu11.04上编译以下代码:#include#includeintmain(){boost::interprocess::shared_memory_objectshdmem(boost::interprocess::open_or_create,"Highscore",boost::interprocess::read_write);shdmem.truncate(1024);std::cout只得到以下错误:/tmp/cc786obC.o:Infunction`boost::interprocess::shared_memory_object::priv_open

C++ boost库shared_memory_object undefined reference 'shm_open'

我尝试在ubuntu11.04上编译以下代码:#include#includeintmain(){boost::interprocess::shared_memory_objectshdmem(boost::interprocess::open_or_create,"Highscore",boost::interprocess::read_write);shdmem.truncate(1024);std::cout只得到以下错误:/tmp/cc786obC.o:Infunction`boost::interprocess::shared_memory_object::priv_open

c++ - 如何将static_assert与sizeof和stringify结合起来?

内存使用在我的应用程序中非常重要。因此,我有特定的断言,在编译时检查内存大小,如果大小与我们之前认为正确的大小不同,则给出static_assert。我已经定义了一个这样的宏:#defineCHECKMEM(mytype,size)static_assert((sizeof(objectType)==size)),"Sizeincorrectfor"#mytype"!");这个宏可以很容易地写出来:CHECKMEM(Book,144);CHECKMEM(Library,80);问题在于,当这个static_assert关闭时,可能很难找出新的大小应该是多少(例如,通过使用隐藏的编译器选

c++ - 如何将static_assert与sizeof和stringify结合起来?

内存使用在我的应用程序中非常重要。因此,我有特定的断言,在编译时检查内存大小,如果大小与我们之前认为正确的大小不同,则给出static_assert。我已经定义了一个这样的宏:#defineCHECKMEM(mytype,size)static_assert((sizeof(objectType)==size)),"Sizeincorrectfor"#mytype"!");这个宏可以很容易地写出来:CHECKMEM(Book,144);CHECKMEM(Library,80);问题在于,当这个static_assert关闭时,可能很难找出新的大小应该是多少(例如,通过使用隐藏的编译器选