草庐IT

enable-stdio-inheritance

全部标签

c++ - Diamond-inheritance 场景在 G++ 中编译良好,但在 VC++/Eclipse 中产生警告/错误

我有一个基类“Base”,它是一个纯虚类:classBase{public:virtualvoidA()=0;virtualvoidB()=0;virtual~Base(){}//Eclipsecomplainsthataclasswithvirtualmembersmusthavevirtualdestructor};我还有2个其他类,其中一个实现A(),另一个实现B():classDerivedA:publicvirtualBase{public:virtualvoidA(){printf("HellofromA");}};classDerivedB:publicvirtualBa

c++ - Diamond-inheritance 场景在 G++ 中编译良好,但在 VC++/Eclipse 中产生警告/错误

我有一个基类“Base”,它是一个纯虚类:classBase{public:virtualvoidA()=0;virtualvoidB()=0;virtual~Base(){}//Eclipsecomplainsthataclasswithvirtualmembersmusthavevirtualdestructor};我还有2个其他类,其中一个实现A(),另一个实现B():classDerivedA:publicvirtualBase{public:virtualvoidA(){printf("HellofromA");}};classDerivedB:publicvirtualBa

c++ - stdio.h 在 C++ 中不是标准的?

我知道大多数编译器都允许:#include和#include但有人认为实际上不是C++标准。这是真的吗? 最佳答案 stdio.h是标准的,但已弃用。永远喜欢cstdio在C++中。[n3290:C.3.1/1]:ForcompatibilitywiththeStandardClibrary,theC++standardlibraryprovidesthe18Cheaders(D.5),buttheiruseisdeprecatedinC++.[n3290:D.5/3]:[Example:Theheaderassuredlyprov

c++ - stdio.h 在 C++ 中不是标准的?

我知道大多数编译器都允许:#include和#include但有人认为实际上不是C++标准。这是真的吗? 最佳答案 stdio.h是标准的,但已弃用。永远喜欢cstdio在C++中。[n3290:C.3.1/1]:ForcompatibilitywiththeStandardClibrary,theC++standardlibraryprovidesthe18Cheaders(D.5),buttheiruseisdeprecatedinC++.[n3290:D.5/3]:[Example:Theheaderassuredlyprov

c++ - 从 std::enable_shared_from_this 和抽象基类派生可以吗?

我正在编写一个应该从抽象基类派生的类。我无法更改抽象基类。该类(class)将以shared_ptr的形式举行到抽象基类。继承抽象基类和可以吗enable_shared_from_this?像这样:classIWidget{public:virtual~IWidget(){}//...};classWidget:publicstd::enable_shared_from_this,publicIWidget{protected:Widget();//protected,usecreatepublic:staticstd::shared_ptrcreate(){returnstd::sh

c++ - 从 std::enable_shared_from_this 和抽象基类派生可以吗?

我正在编写一个应该从抽象基类派生的类。我无法更改抽象基类。该类(class)将以shared_ptr的形式举行到抽象基类。继承抽象基类和可以吗enable_shared_from_this?像这样:classIWidget{public:virtual~IWidget(){}//...};classWidget:publicstd::enable_shared_from_this,publicIWidget{protected:Widget();//protected,usecreatepublic:staticstd::shared_ptrcreate(){returnstd::sh

c++ - 重载函数模板消歧与 `std::enable_if` 和非推断上下文

考虑以下代码:templatestructdependent_type{usingtype=T;};templateautofoo(T)->std::enable_if_t{}>{std::coutvoidfoo(typenamedependent_type::type){std::coutfoo的第一次重载可以推断T从它的调用。foo的第二次重载是non-deducedcontext.intmain(){foo(1);//prints"b"foo(1.0);//prints"b"foo(1);//prints"a"}为什么foo(1)打印“b”而不是“a”?wandboxexampl

c++ - 重载函数模板消歧与 `std::enable_if` 和非推断上下文

考虑以下代码:templatestructdependent_type{usingtype=T;};templateautofoo(T)->std::enable_if_t{}>{std::coutvoidfoo(typenamedependent_type::type){std::coutfoo的第一次重载可以推断T从它的调用。foo的第二次重载是non-deducedcontext.intmain(){foo(1);//prints"b"foo(1.0);//prints"b"foo(1);//prints"a"}为什么foo(1)打印“b”而不是“a”?wandboxexampl

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将从重载集中剔除函数,以便选择另一个函数(如果