Чтобы избежать определения области действия STL, вы можете набрать
using namespace std;
Чтобы избежать определения только нескольких вещей, вы можете набрать:
using std::cout;
using std::cin;
Я хочу написать библиотеку, которая действует так же. Однако вместо того, чтобы включать конкретные классы, я хочу иметь возможность включать определенные наборы функций.
Так, например, я кодирую:
- Коллекция строковых функций
- Сборник математических функций
Они являются частью одного и того же пространства имен, но я могу включить куски, которые я хочу
Это код sudo-ish, но я думаю, что он понял мою идею:
namespace Everything{
namespace StringFunctions{
void str1(string & str);
void str2(string & str);
void str3(string & str);
void str4(string & str);
void str5(string & str);
}
namespace MathFunctions {
void math1(int & num);
void math2(int & num);
void math3(int & num);
void math4(int & num);
void math5(int & num);
}
}
тогда я хочу иметь возможность сделать что-то вроде:
#include "Everything.h"
using Everything::Stringfunctions;
int main(){
str1("string"); //this works, I can call this!
math1(111); //compile error: I've never heard of that function!
return 0;
}
Очевидно, что это не работает, и я немного запутался, как разделить мою библиотеку. Я не хочу делать их классами, а затем везде использовать «оператор точки», но я также не хочу включать тонну заголовочных файлов.
Может быть, я поступаю неправильно. Я надеюсь, что каждый может помочь мне выбрать правильный подход.
EDIT:
Работает, написав:
using namespace Everything::Stringfunctions;
Это очень очевидно сейчас, оглядываясь назад.