Я искал библиотеки SVM и встречал BudgetedSVM.
В исходном коде я нашел необычное использование, как это:
#sample.h
#ifndef SAMPLE_H
#define SAMPLE_H
//no header included or namespace declared here
#ifdef __cplusplus
extern "C" {
#endif
//no header included or namespace declared too
class Sample: public Parent
{
public:
Sample();
~Sample();
type0 fun(type1 val1, type2 val2);
...
};
#ifdef __cplusplus
}
#endif
#endif // SAMPLE_H
Как видно, в заголовке не требуется дополнительный заголовок или пространство имен, все они находятся в файле cpp.
Вот мои мысли:
-
Почему
extern "C"
, который обычно используется для интерфейсов C, группирует класс С++? Является ли использование таким образом хорошим для чего-то? -
Даже если появились
type0
,type1
иtype2
, их собственные заголовки здесь не включены, а в файл cpp (например, sample.h). Однако, когда я вызываю классSample
, я должен включать эти заголовки (например,type0.h
,type1.h
,type2.h
), что кажется неудобным.