草庐IT

Instance

全部标签

c++ - C++ 中定义异常类和抛出异常的标准方法

我想构建一个类,它的函数可能会抛出我想在使用时捕获的异常。我从标准异常类继承my_exception。我实现了what()函数,以便它返回一个存储在私有(private)字符串变量中的字符串我认为将异常定义为嵌套类会更好,就像在iostream库中使用ios_base::failure完成的方式一样。我不太确定的是,我应该在哪里以及如何定义my_excpetion的对象。我希望我能看到iostream函数的内部代码,看看它们是如何做到的。我考虑了几个选项:对于每个异常原因,我都可以定义一个my_exception的静态实例,并使用一个构造函数获取一个字符串并将其保存到我的私有(priv

c++ - 从实例访问 typedef

和STL容器一样,为什么我们不能从类实例访问类内部的typedef?对此有什么特别的见解吗?当value_type是模板参数时,如果不需要像vector::value_type那样指定模板参数,它可以帮助编写更通用的代码例子:classT{public:typedefintvalue_type;value_typei;};Tt;T::value_typei;//okt.value_typei;//won'twork 最佳答案 答案是先使用decltype获取类。例如,decltype(t)::value_type需要C++11。引用

c++ - 从实例访问 typedef

和STL容器一样,为什么我们不能从类实例访问类内部的typedef?对此有什么特别的见解吗?当value_type是模板参数时,如果不需要像vector::value_type那样指定模板参数,它可以帮助编写更通用的代码例子:classT{public:typedefintvalue_type;value_typei;};Tt;T::value_typei;//okt.value_typei;//won'twork 最佳答案 答案是先使用decltype获取类。例如,decltype(t)::value_type需要C++11。引用

c++ - 用于模板类的 pimpl

我想使用pimpl习惯用法来避免我的库的用户需要我们的外部依赖项(如boost等),但是当我的类被模板化时,这似乎是不可能的,因为方法必须在标题中。有什么我可以代替的吗? 最佳答案 如果类是模板化的,您的用户基本上需要编译它(这在最广泛使用的C++实现中确实如此),因此他们需要您的外部依赖项。最简单的解决方案是将类的大部分实现放在非模板基类(或某个类的封装成员对象)中。解决那里的模块隐藏问题。然后编写模板派生(或封闭)类为其添加类型安全性。例如,假设您有一个模板,它提供了惊人的首次访问分配能力(省略了必要的复制构造函数、赋值、析构函

c++ - 用于模板类的 pimpl

我想使用pimpl习惯用法来避免我的库的用户需要我们的外部依赖项(如boost等),但是当我的类被模板化时,这似乎是不可能的,因为方法必须在标题中。有什么我可以代替的吗? 最佳答案 如果类是模板化的,您的用户基本上需要编译它(这在最广泛使用的C++实现中确实如此),因此他们需要您的外部依赖项。最简单的解决方案是将类的大部分实现放在非模板基类(或某个类的封装成员对象)中。解决那里的模块隐藏问题。然后编写模板派生(或封闭)类为其添加类型安全性。例如,假设您有一个模板,它提供了惊人的首次访问分配能力(省略了必要的复制构造函数、赋值、析构函

c++ - C++ 类构造函数可以知道它的实例名称吗?

是否可以从类方法中知道对象实例名称/变量名称?例如:#includeusingnamespacestd;classFoo{public:voidPrint();};voidFoo::Print(){//whatshouldbe?????????below?//cout 最佳答案 没有。变量名是给程序员的,编译器看地址。提供有关其程序的元数据/反射的其他语言可能会提供此功能,C++不是这些语言之一。 关于c++-C++类构造函数可以知道它的实例名称吗?,我们在StackOverflow上找

c++ - C++ 类构造函数可以知道它的实例名称吗?

是否可以从类方法中知道对象实例名称/变量名称?例如:#includeusingnamespacestd;classFoo{public:voidPrint();};voidFoo::Print(){//whatshouldbe?????????below?//cout 最佳答案 没有。变量名是给程序员的,编译器看地址。提供有关其程序的元数据/反射的其他语言可能会提供此功能,C++不是这些语言之一。 关于c++-C++类构造函数可以知道它的实例名称吗?,我们在StackOverflow上找

c# - 困惑: instance creation of c# class in c++

假设someClass是一个用C#定义的类,带有一些方法intdoSomething(void),并且为简单起见,提供一个不带参数的构造函数。然后,在C#中,必须在gc堆上创建实例:someClassc;//legit,butonlyanullpointerinC#//c->doSomething()//wouldnotevencompile.c=newsomeClass();//nowitpointstoaninstanceofsomeclass.inti=c->doSomething();现在,如果someClass被编译成一些.Net库,你也可以在C++/CLI中使用它:some

c# - 困惑: instance creation of c# class in c++

假设someClass是一个用C#定义的类,带有一些方法intdoSomething(void),并且为简单起见,提供一个不带参数的构造函数。然后,在C#中,必须在gc堆上创建实例:someClassc;//legit,butonlyanullpointerinC#//c->doSomething()//wouldnotevencompile.c=newsomeClass();//nowitpointstoaninstanceofsomeclass.inti=c->doSomething();现在,如果someClass被编译成一些.Net库,你也可以在C++/CLI中使用它:some

引用类型的 C++11 成员变量, vector push_back 后的不同行为

我正在使用其他人的类,当我将它插入vector时它表现得很奇怪。它涉及一个成员变量,它是对另一个成员变量的引用。这是最小的独立示例:#include#includeclassMyclass{public:Myclass():a(1.0){}floata;float&a_ref=a;voidaddOne(){a=a+1.0;}};intmain(){Myclassinstance1;instance1.addOne();//prints2:std::coutvec;Myclassinstance2;vec.push_back(instance2);vec.at(0).addOne();/