草庐IT

static-members

全部标签

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++ - "cannot access private member' "只有当类有导出链接时才会出错

我最近不得不更改几个类的链接规范并遇到了问题。其中两个类包含一个std::map和一个std::unique_ptr作为值类型。更改链接后,编译器开始提示“无法访问在类'std::unique_ptr'中声明的私有(private)成员”错误。有谁知道为什么只有在提供导出规范或有解决方案时才会发生这种情况?示例代码:#includestructSomeInterface{virtual~SomeInterface()=0;};//ThisclasscompileswithnoproblemsstructLocalClass{std::map>mData;};//Thisclassfai

c++ - "cannot access private member' "只有当类有导出链接时才会出错

我最近不得不更改几个类的链接规范并遇到了问题。其中两个类包含一个std::map和一个std::unique_ptr作为值类型。更改链接后,编译器开始提示“无法访问在类'std::unique_ptr'中声明的私有(private)成员”错误。有谁知道为什么只有在提供导出规范或有解决方案时才会发生这种情况?示例代码:#includestructSomeInterface{virtual~SomeInterface()=0;};//ThisclasscompileswithnoproblemsstructLocalClass{std::map>mData;};//Thisclassfai

c++ - C++ 中的命名冲突 : How to access a struct member called "class"

我在使用xlib库时遇到了一个命名问题:我正在使用一个结构,它有一个名为“类”的成员。我假设这个库主要用于纯C程序。所以没有问题。但我正在用C++编程,这里的名称“类”是一个关键字,不能用来表示变量。所以,如果我通过访问结构myvariable=mystruct->class;我收到了错误:“class”之前的预期unqualified-id鉴于我无法更改结构本身,尽管存在命名冲突,我如何访问该结构成员? 最佳答案 GiventhatIcannotchangethestructitself,howcanIaccessthisstru

c++ - C++ 中的命名冲突 : How to access a struct member called "class"

我在使用xlib库时遇到了一个命名问题:我正在使用一个结构,它有一个名为“类”的成员。我假设这个库主要用于纯C程序。所以没有问题。但我正在用C++编程,这里的名称“类”是一个关键字,不能用来表示变量。所以,如果我通过访问结构myvariable=mystruct->class;我收到了错误:“class”之前的预期unqualified-id鉴于我无法更改结构本身,尽管存在命名冲突,我如何访问该结构成员? 最佳答案 GiventhatIcannotchangethestructitself,howcanIaccessthisstru

c++ - 在 Class 范围内声明时,应如何在 C++14 中引用变量模板?

例如:classexample{public:templatestaticconstexprTvar=T(1.5);};intmain(){inta=example::var;exampleobj;intb=obj.var;return0;}GCC对两者都产生错误:'example::var'isnotafunctiontemplate和'var'isnotamembertemplatefunctionClang正确编译了第一个,但产生了第二个错误:cannotrefertomember'var'in'example'with'.'根据C++14标准(ISO/IEC14882:2014

c++ - 在 Class 范围内声明时,应如何在 C++14 中引用变量模板?

例如:classexample{public:templatestaticconstexprTvar=T(1.5);};intmain(){inta=example::var;exampleobj;intb=obj.var;return0;}GCC对两者都产生错误:'example::var'isnotafunctiontemplate和'var'isnotamembertemplatefunctionClang正确编译了第一个,但产生了第二个错误:cannotrefertomember'var'in'example'with'.'根据C++14标准(ISO/IEC14882:2014

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