На основании ответа @ Staale и, пытаясь не полагаться на сторонние библиотеки, я бы выполнил подход файловой системы, проверив физическое местоположение первого пакета с помощью:
import java.io.File;
import java.io.FileFilter;
import java.util.ArrayList;
...
Class>[] foundClasses = new Class>[0];
final ArrayList> foundClassesDyn = new ArrayList>();
new java.io.File(
klass.getResource(
"/" + curPackage.replace( "." , "/")
).getFile()
).listFiles(
new java.io.FileFilter() {
public boolean accept(java.io.File file) {
final String classExtension = ".class";
if ( file.isFile()
&& file.getName().endsWith(classExtension)
// avoid inner classes
&& ! file.getName().contains("$") )
{
try {
String className = file.getName();
className = className.substring(0, className.length() - classExtension.length());
foundClassesDyn.add( Class.forName( curPackage + "." + className ) );
} catch (ClassNotFoundException e) {
e.printStackTrace(System.out);
}
}
return false;
}
}
);
foundClasses = foundClassesDyn.toArray(foundClasses);
Если можно позволить себе использовать Повышение, то существует библиотека UUID , которая должна добиться цели. Это очень просто для использования - проверяют документацию и этот ответ .
Просто использование безотносительно guid/uuid присутствует на целевой платформе, является лучшим. Делать правильно его трудно (давайте пойдем по магазинам ;)).
вероятность коллизии между любыми двумя идентификаторами от различных но хорошо выполняемых реализаций должна быть далеко за пределами любого разумного шанса случая во время жизни этой вселенной.
Хорошо одно оригинальное (?) решение состояло бы в том, чтобы использовать веб-сервис для получения GUID, но я сомневаюсь, что это будет хорошим решением для программы C++ особенно, если это не будет включенная сеть.
Вот URL, который мог бы пригодиться, если Вы принимаете решение преследовать эту опцию: http://www.hoskinson.net/GuidGenerator/default.asp
Генератор GUID обычно полагается на характеристики оборудования машины, обычно наполняйте как MAC-адреса или дюйм/с. Единственной вещью, которую можно сделать, который абсолютно независим от платформы, является использование некоторый PRNG, отобранный вручную или отобранный из источника некоторого времени. Это обычно не генерирует истинный глобально уникальный идентификатор в том смысле, что Вам гарантируют это, никто в мире не генерирует то же число.
в linux: man uuid
в win: проверьте структуру UUID и функцию UuidCreate в msdn
[править] функция будет выглядеть так
extern "C"
{
#ifdef WIN32
#include <Rpc.h>
#else
#include <uuid/uuid.h>
#endif
}
std::string newUUID()
{
#ifdef WIN32
UUID uuid;
UuidCreate ( &uuid );
unsigned char * str;
UuidToStringA ( &uuid, &str );
std::string s( ( char* ) str );
RpcStringFreeA ( &str );
#else
uuid_t uuid;
uuid_generate_random ( uuid );
char s[37];
uuid_unparse ( uuid, s );
#endif
return s;
}