小编Mik*_*rek的帖子

没有类的对象 - 'clean C'中的数据模型

我在一些中型项目上使用过C++,但我从来没有在C中做过任何严肃的编程.

阅读完本文后,我开始想知道如何在没有类和异常的情况下使用C++ 11.我曾经听过干净的C这个词.Clean C应该是一个C++代码,它不使用ANSI C没有的C++特性,比如类或元编程.

有充足的资源如何有效地使用C语言以及如何在C++中完成它们.但是很难找到任何有关如何充分利用这两个方面的资源.

我的问题分为两部分:

  1. 在没有名称空间,异常和元编程的情况下使用C++是否有任何好的资源?书籍,开源项目?
  2. 请查看这段简单的代码,这是我第一次尝试处理C++ 11中提到的子集中的数据结构和字符串.我首先想到的是代码冗余.你有什么不同的做法,为什么?

-

#include <cstring>

namespace addressbook {
namespace contact {

struct contact {
    char* name;
    char* email;
};

void initialize(addressbook::contact::contact* contact)
{
    contact->name = nullptr;
    contact->email = nullptr;
}

void deinitialize(addressbook::contact::contact* contact)
{
    delete[] contact->name;
    delete[] contact->email;
}

void set_name(addressbook::contact::contact* contact, char* name)
{
    delete[] contact->name;
    contact->name = new char [strlen(name) + 1];
    std::strcpy(contact->name, name);
}

void set_email(addressbook::contact::contact* contact, char* email)
{
    delete[] contact->email;
    contact->email …
Run Code Online (Sandbox Code Playgroud)

c c++ procedural-programming c++11

4
推荐指数
2
解决办法
3380
查看次数

操作只能在一种类型中进行调度

我有一个记录,并希望它的一些访问器功能.

package Some_Package is                                                             

   type A is tagged record                                                          
      First_Field  : Integer;                                                       
      Second_Field : Character;                                                     
   end record;                                                                      

   type B is private;                                                               

   function Some_A (Some_B : B) return A;                                           

private                                                                             

   type B is tagged record                                                          
      Some_A : A;                                                                   
   end record;                                                                      

end Some_Package;
Run Code Online (Sandbox Code Playgroud)

这就是GNAT给我的东西:

some_package.ads:10:13: operation can be dispatching in only one type
Run Code Online (Sandbox Code Playgroud)

对于Ada新手来说,这个错误有点神秘,我会理解我做错了什么,以及如何正确地做到这一点.

ada accessor gnat

4
推荐指数
1
解决办法
674
查看次数

标签 统计

accessor ×1

ada ×1

c ×1

c++ ×1

c++11 ×1

gnat ×1

procedural-programming ×1