反射可以用来实例化一个对象的基类属性吗?
这样: public class remoteStatusCounts : RemoteStatus { public int statusCount; public remoteStatusCounts(RemoteStatus r) { Type t = r.GetType(); foreach (PropertyInfo p in t.GetProperties()) { this.property(p) = p.GetValue(); //example pseudocode } } } 这个示例有点简单(来自Jira Api -remotestatus具有4个属性),但请想象基类有30个属性.我不想手动设置所有这些值,尤其是如果我的继承类只有几个额外的属性. 反思似乎暗示了答案. 我在使用sholditance(publix
18 2024-04-20
编程技术问答社区
被调用的对象不是一个函数c
早上好 - 这是我的面条稍等一下(也很难谷歌了解我注意到的C编程语言...) ) void prepareFrames(PDouble prep){ int gap = prep->gap; printf("Gap is %d\n", gap); prep->intFrames = (PFrame*)malloc(gap*sizeof(PFrame)); PFrame copyFrame = prep->first; int i; for(i=0; i intFrames[i] = (PFrame)malloc(sizeof(Frame)); copyFrame(prep->intFrames[i], prep->first, i); //LINE 189 } } void copyFrame(PFrame new, PFrame copy, int num){ new->s
16 2024-04-10
编程技术问答社区
有没有一个好的方法来复制Gtk小部件?
有一种方法,使用C中的GTK库克隆一个GTK按钮(例如),然后将其包装在应用程序中的其他位置.我知道您不能两次打包相同的小部件.而且该代码显然无法使用,但是显示了我尝试浅副本的按钮时会发生什么: GtkButton *a = g_object_new(GTK_TYPE_BUTTON, "label", "o_0", NULL); GtkButton *b = g_memdup(a, sizeof *a); gtk_box_pack_start_defaults(GTK_BOX(vbox), GTK_WIDGET(b)); 周围的代码会创建一个vbox并将其包装在窗口中并运行gtk_main().这将导致这些难以理解的错误消息: (main:6044): Gtk-CRITICAL **: gtk_widget_hide: assertion `GTK_IS_WIDGET (widget)' failed (main:6044): Gtk-CRITICAL **: gtk_
16 2024-04-08
编程技术问答社区
boost::shared_ptr boost::mutex and copy constructor
我需要保护班上数据结构的访问.由于我不能有utex(因为我无法复制它),所以我考虑拥有共享_ptr并将静音保留在那里.这是我想法的示例代码: class Sample { typedef boost::lock_guard AcquireLock; boost::shared_ptr mutt; public: Sample() : mutt(new boost::mutex) {} void Method() { AcquireLock lock(*mutt); //do some work here } }; 我有以下问题: 这样使用sutex是一个不好的做法(作为班级的成员,通过shared_ptr)? 我应该为此类具有复制构造函数,因为它的内存通过shared_ptr分配了? 编辑:也许我需要提供更多详细信息: 我将
22 2024-04-02
编程技术问答社区
为什么用户定义的移动构造器会禁用隐含的复制构造器?
当我阅读boost/shared_ptr.hpp时,我看到了此代码: // generated copy constructor, destructor are fine... #if defined( BOOST_HAS_RVALUE_REFS ) // ... except in C++0x, move disables the implicit copy shared_ptr( shared_ptr const & r ): px( r.px ), pn( r.pn ) // never throws { } #endif 评论"生成复制构造函数,destuructor都很好,除了在C ++ 11中,"移动"禁用隐式副本"的意思是?我们是否可以始终写副本,以防止C ++ 11? 中的这种情况 解决方案 我已经投入了Ildjarn的答案,因为我发现它既准确又幽默. : - ) 我提供了一个替代答案 背景 c ++已隐式生成复制成员,因为如果没有
14 2024-04-01
编程技术问答社区
C++位数复制对象失败?为什么?
这个问题是关于类对象的位复制. 为什么未调用构造函数,而是在以下代码中调用destructor? 输出为 howmany h2 = f(h);//没有构造函数在这里打电话. after construction of h: objectCount = 1 x argument inside f(): objectCount = 1 ~HowMany(): objectCount = 0 after call to f(): objectCount = 0 ~HowMany(): objectCount = -1 ~HowMany(): objectCount = -2 class HowMany { static int objectCount; public: HowMany() { objectCount++; } static void print(const string& msg = "") { if(msg.size
8 2024-03-31
编程技术问答社区
不允许对一个特定的类使用auto,C++14与C++17的更新
什么功能允许我在C ++ 17中使用auto进行auto进行auto,而不是C ++ 14? 考虑以下代码: struct A{ A(A const&)=delete; A(A&&)=delete; }; int main(){ auto a1 = A{}; // ok in C++17, not ok in C++14 auto&& a2 = A{}; // ok in C++17, ok in C++14 } 事实证明,这在C ++ 14中是无效的代码,但在C ++ 17中是有效的. 这种行为在Clang和GCC中是一致的: https://godbolt.org/z/af8mec P> 我问的原因是因为直到最近我要在上课(代表参考)不可仿制的课程,以及不允许使用auto的其他因素,但不幸的是,事实证明,现在该技术不起作用C ++ 17. (换句话说,我认为C ++ 14中的行为在概念上是正确的.) 为什么auto
30 2024-03-20
编程技术问答社区
std::atomic中的自定义类型
我在std::atomic中放了一个自定义类Unit.类显示默认构造函数 如下 namespace Base { template class Unit { public: constexpr Unit() = default; private: T m_Value; }; } 它曾经工作正常,直到我注意到我忘了在默认构造函数中初始化班级的唯一成员为零.因此,我删除了= default并提供了构造函数的实现 template constexpr Unit::Unit() : m_Value(T(0)) { } 现在我收到编译器错误: Error C2280 'std::atomic::
8 2024-03-18
编程技术问答社区
为什么一个对象的初始化会调用复制构造函数?
考虑以下最小工作示例: #include int main() { ::std::atomic a = false; } 副本和复制原子的分配均已明确删除.但是,这应该调用 ctor完全服用bool . g ++和clang ++抱怨说,这条线正在尝试调用atomic的副本CTOR: $ g++ -std=c++1z a.cpp a.cpp: In function ‘int main()’: a.cpp:4:27: error: use of deleted function ‘std::atomic::atomic(const std::atomic&)’ ::std::atomic a = false; ^~~~~ $ clang++ -std=c++1z a.cpp a.cpp:4:23: error: copying vari
8 2024-03-18
编程技术问答社区
为什么在C++11中,原地成员初始化要使用复制构造函数?
我对以下代码有些困惑: struct A { std::atomic a = 0; }; 给出错误: 复制" std :: atomic"类型的成员子对象调用已删除的构造函数 但几乎相同的代码确实有效: struct A { std::atomic a = {0}; }; okey,如果第一个变体需要复制构造函数,则必须使用operator=().可是等等!该操作员在没有复制构造函数的情况下完美工作: A a; a.a = 1; 任何人都可以解释如何通过简单操作来扩展两个原始初始化?为什么第一个需要复制构造函数? 解决方案 所有参考均为N3797,即C ++ 1y当前工作草案. §8.5初始化器[DCL.Init]/15状态: 以形式出现的初始化 T x = a; 以及参数传递,功能返回,抛出异常(15.1),处理例外 (15.3),汇总成员初始化(8.5.1)称为 copy-initializ
10 2024-03-18
编程技术问答社区
在有智能指针的类上正确实现复制构造器和等价操作符
假设我想实现可复制的类,以便我可以实现复制构造函数和分配运算符.但是,独特和共享指针变量的正确实现和处理是什么?请参阅这个人为的示例,该示例具有两种类型的指针: 标题文件 #include using std::unique_ptr; using std::shared_ptr; class Copyable { private: unique_ptr uniquePointer; shared_ptr sharedPointer; public: Copyable(); Copyable(int value); Copyable(const Copyable& other); ~Copyable(); public: int GetUniqueValue() { return *uniquePointer; }; int GetSharedValue() { ret
16 2024-03-17
编程技术问答社区
在堆栈中声明一个对象的两种方式的区别
以下两个声明之间有什么区别,假设我尚未指定copy构造函数和Beatle>? 中的operator= Beatle john(paul); 和 Beatle john = paul; 编辑: 在对象分配中,操作员=除非另有说明,否则隐式调用复制构造函数? 解决方案 它们是不同的语法结构.第一个是直接初始化,第二个是复制初始化.它们的行为实际上相同,只是第二个需要一个非explicit构造函数.* 两行都是初始化. 机智:const int i = 4;很好,但是const int i; i = 4;不是. *)更准确:如果声明相关构造函数explicit,第二版将不起作用.因此,更一般而言,直接启动为您提供了一种"免费"转换: struct Foo { Foo(std::string) {} }; Foo x("abc"); // OK: char(&)[4] -> const char * -> std::string ->
4 2024-03-17
编程技术问答社区
在C++中把一个类对象分配给另一个类对象
我想将一个类对象分配给C ++中的另一类对象. ex: 有一只班狗和另一只班级猫.创建每个实例的一个(D1&C1).不想使用任何STL.我想在我的代码 中使用此语句 d1 = c1; 程序 class dog { char dc; float df; int di; public: void setdata2(char c, float f, int i) { dc = c; df = f; di = i; } void showdata2() { cout
8 2024-03-17
编程技术问答社区
防止复制构建和分配一个返回值的引用
如果我的函数返回对我无法控制其源的类实例的引用,例如list: list& f(); 我想确保其值仅 分配给另一个参考,例如: list &a_list = f(); 如果用户代替: list a_list = f(); // note: no '&', so the list is copied 我希望它是一个编译时间错误,因为用户只能操纵列表的副本,而不是原始列表(这绝不是我的应用程序的意图/想要的). 有什么方法可以防止上述复制构建和分配(例如通过某种"包装器"类)? 理想情况下,如果要使用某些包装器类,例如wrapper,我希望它适用于任何类型T的对象. 是的,我知道,对于我 do 的类都可以控制,我可以简单地使复制构造者和分配操作员private喜欢: class MyClass { public: // ... private: MyClass( MyClass
4 2024-03-17
编程技术问答社区
如何利用模板copy&move构造器和赋值操作符?
考虑以下C ++代码,但我的失败尝试避免偏爱非网板副本和移动构造函数和分配运营商: /p> template class A { public: A() { /* implementation here */ } // Remove from the overloads the default copy&move constructors and assignment operators A(const A&) = delete; A& operator=(const A&) = delete; A(A&&) = delete; A& operator=(A&&) = delete; // I want these to be used e.g. by std::vector template A(const A& fellow) { /* implementati
6 2024-03-17
编程技术问答社区
复制语义和向量
我正在处理为内部使用分配内存的对象.目前,它们不可复制. ,例如 class MyClass { public: MyClass() { Store = new int; } ~MyClass() { delete Store; } private: int* Store; }; 我想添加允许分配的副本和移动语义,还可以将它们存储在矢量中(带有移动语义).我不想使用智能指针,并且想保持简单. 我应该定义哪些班级成员?如何强制复制分配或移动分配?按值或引用传递对象时,将执行哪个副本?连续版本的C ++? 的实现会有所不同 ,例如 MyClass A, B; A = B; // How to force copy or move ? std::vector V = { A, B }; 解决方案 您询问了矢量,所以...这是类tbx::Vector.我把它写为练习.它的设计遵循 arthur o'dwyer 在C
14 2024-03-17
编程技术问答社区