способ разделить неклассную библиотеку на заголовок и реализацию - PullRequest
0 голосов
/ 03 июля 2018

Допустим, есть библиотека с именем test, заголовок "test.hpp" выглядит следующим образом:

namespace test
{
  int myfun(int a);
}

А что касается реализации, какой стиль лучше?

#include"test.hpp"
int test::myfun(int a){
  return a*a;
}

или

#include"test.hpp"
namespace test
{
  int myfun(int a){
    return a*a;
  }
}

1 Ответ

0 голосов
/ 03 июля 2018

Предположим, у вас есть несколько пространств имен или вложенных пространств имен в заголовке как:

namespace test{
namespace subtest{
   int Foo(int);
   //many other functions go here
} //namespace subtest
} //namespace test

А

namespace test1{
int Foo(int);
}
namespace test2{
int Bar(int);
}

В этих случаях вы всегда должны использовать реализацию Second, поскольку она делает ваш код более читабельным и легко отлаживаемым.

Первый:

#include "test.hpp"
int test::subtest::Foo(int x){return x;}
//many other goes here

Посмотрите, как увеличивается вложенность каждый раз, чтобы определить функцию, вам нужно написать полностью указанное имя функции (снова повторяя пространства имен).

Второй:

#include "test.h"
namespace test{
namespace subtest{
int Foo(int x){return x;}
//other go here
}
}

Это решает повторение имен пространства имен, также вы можете легко реорганизовать вещи. Для отладки или рефакторинга содержимого пространства имен просто перейдите к его первому объявлению и измените все. Вы также можете свернуть код в одном пространстве имен. (С большей идеей) делает ваш код красивее.


Аналогично для нескольких пространств имен

Первый:

#include "test.hpp"
int test1::Foo(int x){return x;}
int test2::Bar(int x){return x;}

Как трудно отлаживать вещи. Более того, если в двух пространствах имен встречается одно и то же имя функции, у вас будет хорошее время для отладки.

Второй:

#include "test.hpp"
namespace test1{
int Foo(int x){return x;}
}
namespace test2{
int Bar(int x){return x;}
}

Все объявления в пространстве имен будут вместе. Таким образом, отладка и переход в пространство имен будут простыми.

Также большинство проектов с открытым исходным кодом используют вторую реализацию

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...